leetcode--数组(Easy)

2019.08.02


1.返回和为指定值的两数的索引

  • 基本思想:哈希表
  • 实现:把数组中的值作为key,索引作为value,在一此遍历的过程中,一边转map,一边查找符合要求的两个数
   def twoSum(self, nums: List[int], target: int) -> List[int]:_dict = {}for i, m in enumerate(nums):if _dict.get(target - m) is not None:return [_dict.get(target - m),i]_dict[m] = i

26.删除排序数组中的重复项

  • 基本思想:双指针
  • 实现:头指针初始为0,尾指针初始为1。在一次遍历过程中,若头尾元素相同,则尾指针向后移动;若头尾元素不同,则头指针之后的位置赋值为尾元素,同时头尾指针一起向后移动一个位置。注意尾指针在移动过程中不要超出数组边界。
    def removeDuplicates(self, nums):m = len(nums)i = 0j = 1while j < m:while j < m and nums[i] == nums[j]:j += 1while j < m and nums[i] != nums[j]:nums[i+1] = nums[j]i += 1j += 1return i+1

2019.08.03


27.移除数组中和指定值相同的元素

  • 基本思想:双指针
  • 实现1:头指针初始化为0,尾指针初始化为0。在一次遍历过程中,先尾指针向后移动找到不和指定值相同的元素,然后赋值给头元素,同时头尾指针一起向后移动一个位置。
    def removeElement(self, nums: List[int], val: int) -> int:m = len(nums)i = 0j = 0while j < m:while j < m and nums[j] == val:j += 1if j < m:nums[i] = nums[j]i += 1j += 1return i
  • 实现2:头指针h初始为0,计数器k初始为0,h+k 代表尾指针。在一次遍历过程中,先计算连续和指定值相同的元素个数,再将尾元素赋给头元素,同时头指针向后移动一个位置。
    def removeElement(self, nums: List[int], val: int) -> int:m = len(nums)i = 0k = 0  #记录重复元素个数while i+k < m:    while i+k < m and nums[i+k] == val: #一定要用while而不是if,因为val值可能是连续的k += 1 if i+k <m:nums[i] = nums[i+k]  # i代表头指针  i+k代表尾指针i += 1return i

35.搜索元素插入位置

  • 题目等价表达:返回第一个大于等于目标值的元素索引
  • 基本思想:二分法
  • 二分法模板讲解
    #查找第一个大于等于目标值的元素位置:二分查找 80ms   def searchInsert(self, nums: List[int], target: int) -> int:h = 0t = len(nums) - 1 #考虑特殊情况,目标值不在if target > nums[t]:return t + 1#位置的考虑范围[h,t]while h < t:       #退出循环时,h=tmid = h + (t-h)//2    #注意整除的符号,注意中位数的表达if nums[mid] < target:  h = mid + 1   #先考虑最确定的划分,元素值小于目标值时 mid 一定不符合,所以范围变为[mid+1,t]    elif nums[mid] >= target:t = mid   #再考虑不确定的划分,元素值大于等于目标值时 mid 可能符合也可能不符合,所以范围变为[h,mid]return h

2019.08.04


88.第二个有序数组合并到第一个有序数组

  • 基本思想:双指针
  • 实现:指针 i 指向第一个数组最后一个元素,指针 j 指向第二个数组最后一个元素,指针 t 指向第一个数组 i + j + 1 的位置(即合并后数组的最后一个元素位置)。i 指向元素和 j 指向元素比较大小,大的放到 t 指向位置,同时 t 指针和大元素指针向前移动。直到 i 或者 j 有一方减为 -1 时(防止数组溢出),退出循环。若是 j != -1(即第二个数组没有全部合并到第一个数组中),应该循环将第二个数组剩余部分赋值给第一个数组,无需判断 i ,因为是将第二个数组合并到第一个数组中,只要第二个数组元素合并进去就完事了。
class Solution(object):def merge(self, nums1, m, nums2, n):i = m - 1j = n - 1t = n + m -1while i >= 0 and j >= 0:if nums1[i] > nums2[j]:nums1[t] = nums1[i]i -= 1else:nums1[t] = nums2[j]j -= 1t -= 1while j >= 0:nums1[t] = nums2[j]t -= 1j -= 1

167.返回和为指定值的两数索引Ⅱ–输入有序数组

  • 基本思想:双指针
  • 实现:由于是有序数组,所以从两端同时开始遍历即可,若前面元素与后面元素之和等于目标值,直接返回索引;若和大于目标值,则后面索引-1;若和小于目标值,则前面索引+1.
    def twoSum(self, numbers: List[int], target: int) -> List[int]:i = 0j = len(numbers) - 1while i < j:t = numbers[i] + numbers[j]if t == target:return[i+1, j+1]   #直接返回,而不需要append到一个listelif t > target:j -= 1else:i += 1return [-1,-1]

217.存在重复元素

  • 集合法 :判断数组长度和数据集合长度是否相等
    return len(set(nums)) != len(nums)
  • 哈希表 :将元素值作为key,通过hash表查询是否已存在
    def containsDuplicate(self, nums: List[int]) -> bool:_dict = {}for k,v in enumerate(nums):if _dict.get(v) is not None:return True_dict[v] = kreturn False
  • 排序法 :排序之后相邻元素必相等
     nums.sort()for i in range(len(nums)-1):if nums[i+1] == nums[i]:return Truereturn False

219.存在重复元素Ⅱ–判断重复元素索引之差是否小于k

  • 基本思想:哈希表
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:_dict = dict()for i,v in enumerate(nums):if v in _dict and i - _dict[v] <= k:return True_dict[v] = ireturn False

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis系列教程(六):Redis缓存和MySQL数据一致性方案详解

需求起因 在高并发的业务场景下&#xff0c;数据库大多数情况都是用户并发访问最薄弱的环节。所以&#xff0c;就需要使用redis做一个缓冲操作&#xff0c;让请求先访问到redis&#xff0c;而不是直接访问MySQL等数据库。 这个业务场景&#xff0c;主要是解决读数据从Redis缓存…

贪心算法(Greedy Algorithm)之霍夫曼编码

文章目录1. 贪心算法2. 应用2.1 找零钱2.2 区间覆盖2.3 霍夫曼编码霍夫曼编码完整代码1. 贪心算法 我们希望在一定的限制条件下&#xff0c;获得一个最优解每次都在当前的标准下做出当下最优决策&#xff08;整体不一定最优&#xff09;&#xff0c;做出的决策不可以后悔&…

技术思考:也谈知识图谱平台中的数据流程与构建范式思考

笔者之前写过一篇文章《关于知识图谱标准化构建平台的思考&#xff1a;知识图谱只能做项目&#xff0c;不能做平台&#xff1f;》&#xff0c;地址&#xff1a;https://blog.csdn.net/lhy2014/article/details/119857488&#xff0c;从技术实现的难度上&#xff0c;对这一平台的…

数据结构中基本查找算法总结

原文地址&#xff1a;https://www.cnblogs.com/xuzhp/p/4638937.html 基本查找算法 一、查找的基本概念 查找&#xff0c;也可称检索&#xff0c;是在大量的数据元素中找到某个特定的数据元素而进行的工作。查找是一种操作。 二、顺序查找 针对无序序列的一种最简单的查找方式…

领域应用 | 大众点评搜索基于知识图谱的深度学习排序实践

本文转载自公众号&#xff1a;美团技术团队。 本文介绍了大众点评搜索核心排序层模型的演化之路&#xff0c;包括结合知识图谱信息构建适合搜索场景的Listwise深度学习排序模型LambdaDNN以及特征工程实践和相关工具建设。1. 引言挑战与思路搜索是大众点评App上用户进行信息查…

KDD2020 | 揭秘Facebook搜索中的语义检索技术

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 江城编 | 可盐可甜兔子酱导读&#xff1a;今天分享一下 Facebook 发表在 KDD2020 的一篇关于社交网络搜索中的 embedding 检索问题的工作&#xff0c;干货很多&#xff0c;推荐一读。论文题目&#xff1…

python下载网上的文件

1.使用 urlretrieve 最最最简单&#xff01;&#xff01;&#xff01;&#xff01; from urllib.request import urlretrieve # Python 2.7.9 之后版本引入了一个新特性&#xff1a;当你 urllib.urlopen一个 http s的时候会验证一次 SSL 证书 &#xff0c;当目标使用的是自签…

Redis系列教程(八):分布式锁的由来、及Redis分布式锁的实现详解

在很多场景中&#xff0c;我们为了保证数据的最终一致性&#xff0c;需要很多的技术方案来支持&#xff0c;比如分布式事务、分布式锁等。那具体什么是分布式锁&#xff0c;分布式锁应用在哪些业务场景、如何来实现分布式锁呢&#xff1f;今天来探讨分布式锁这个话题。 什么是…

平衡二叉树、二叉排序树-数据结构

数据结构之平衡二叉树建立&#xff1a;https://www.cnblogs.com/zhujunxxxxx/p/3348798.html 平衡二叉树&#xff08;AVL树&#xff09;及C语言实现&#xff1a;http://data.biancheng.net/view/59.html 二叉排序树与平衡二叉树的转化

技术交流:老刘说NLP技术公众号开通

我有一个念想&#xff1a;在当今PR文章满天飞的背景下&#xff0c;我们能够保持人间清醒&#xff0c;对NLP技术有客观、公正的了解&#xff0c;并实事求是地进行技术实践和知识共享。老刘说NLP&#xff0c;将定期发布更多、更简单、更有趣的语言知识、想法、笔记&#xff0c;包…

POJ 2453 贪心应用

文章目录1. 题目1.1 题目链接1.2 题目大意1.3 解题思路2. Accepted 代码1. 题目 1.1 题目链接 http://poj.org/problem?id2453 1.2 题目大意 一个数x的二进制表示有n个1&#xff0c;求一个有相同个数1的二进制数&#xff08;比x大&#xff0c;且要最小的&#xff09; 1.3…

leetcode--数组(Medium1)

2019.08.05 3.无重复字符的最长字串 基本思想&#xff1a;双指针、哈希表实现&#xff1a; 使用 head 指向无重复子串的头&#xff0c;ind 指向当前位置&#xff08;即当前无重复子串的尾&#xff09;&#xff0c;len_max记录当前无重复字串的最长长度&#xff0c;使用字典的 …

ICML2020 | 一行代码就能实现的测试集上分技巧

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 苏剑林编 | 夕小瑶在训练模型的时候&#xff0c;我们需要损失函数一直训练到0吗&#xff1f;显然不用。一般来说&#xff0c;我们是用训练集来训练模型&#xff0c;但希望的是验证集的损失越小越好&…

Redis系列教程(七):Redis并发竞争key的解决方案详解

Redis高并发的问题 Redis缓存的高性能有目共睹&#xff0c;应用的场景也是非常广泛&#xff0c;但是在高并发的场景下&#xff0c;也会出现问题&#xff1a; 高并发架构系列&#xff1a;Redis缓存和MySQL数据一致性方案详解 如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难…

技术动态 | 北京大学计算机所邹磊教授研究组开源面向 RDF 知识图谱的自然语言问答系统 gAnswer...

项目网站: http://ganswer.gstore-pku.com/代码地址: https://github.com/pkumod/gAnswerOpenKG发布地址: http://openkg.cn/tool/ganswer研究组主页: http://mod.icst.pku.edu.cn一、KBQA 任务简介基于知识库的自然语言问答 (Question Answering over Knowledge Base, KBQA) 主…

SQL简明数据分析教程

https://blog.csdn.net/heming6666/article/details/78207476 实际案例分析&#xff1a; 一道简单的sql语句题 https://cloud.tencent.com/developer/article/1092199

POJ 2287 田忌赛马(贪心)

文章目录1. 题目1.1 题目链接1.2 题目大意1.3 解题思路2. Accepted 代码1. 题目 1.1 题目链接 http://poj.org/problem?id2287 1.2 题目大意 双方各有n匹战斗力各异的马&#xff0c;分别派出来PK&#xff0c;假设对方先出牌&#xff0c;我方后出&#xff0c;求我方最多能胜…

Python中的 List

关于List&#xff1a;最最最基本操作其他操作上的问题一、如何判断 list 重复二、根据 list 里面的每一个 list 的第一个元素排序三、 一个 list 给另一个 list 赋值四、list 与 nparray五、二维列表按列取元素报错汇总IndexError:list assignment Index out of rangeValueErro…

Netty的实现原理、特点与优势、以及适用场景

高并发编程系列 高并发编程系列&#xff1a;NIO、BIO、AIO的区别&#xff0c;及NIO的应用和框架选型 高并发编程系列&#xff1a;ConcurrentHashMap的实现原理(JDK1.7和JDK1.8) 高并发编程系列&#xff1a;CountDownLatch、Semaphore等4大并发工具类详解 高并发编程系列&…

拒绝无脑吹!从ACL20看预训练缺陷

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 舒意恒、兔子酱以 BERT 为代表作的预训练模型的研究热度一直很高&#xff0c;到 0202 年了&#xff0c;预训练的研究依旧层出不穷&#xff0c;而且 ACL 2020 Best Paper 荣誉提名也选择了这一主题的研究…