LeetCode面试常见Top100
文章平均质量分 73
链表:2.19.23
weixin_...
这个作者很懒,什么都没留下…
展开
-
88. Merge Sorted Array合并两个有序数组Python & Java
给定两个已排序的整数数组nums1和nums2,将nums2合并为nums1作为一个已排序的数组。1. 在nums1和nums2中初始化的元素数分别为m和n2. 假设nums1有足够的空间(大小大于或等于m + n)来容纳nums2中的其他元素Input: nums1=[1,2,4,5,6,0] nums2=[3] m=5 n=1Output: [1,2,3,4,5,6]把nums1中m~m+n的元素替换成...原创 2020-05-16 10:33:54 · 106 阅读 · 0 评论 -
740. Delete and Earn删除和赚取 Java
给定一个整数数组nums。您希望通过多次执行以下操作来最大化获得的分数:选择任何nums[i]并删除它以获得nums[i]积分。之后,您必须删除每个等于 的元素nums[i] - 1和每个等于 的元素nums[i] + 1。通过多次应用上述操作返回您可以获得的最大积分数。示例 1:输入: nums = [3,4,2]输出: 6解释:您可以执行以下操作:删除 4 获得 4 分。因此,3 也被删除。数字 = [2]。删除 2 获得 2 分。数字 = []。您总共获得 6 分。示例 2:输原创 2021-11-07 06:39:41 · 128 阅读 · 0 评论 -
64. Minimum Path Sum最短路径的加和
给定一个用非负数填充的mxn网格,请找到一条从左上方到右下方的路径,该路径将沿其路径的所有数字的总和最小。注意:只能在任何时间点向下或向右移动。Input:[ [1,3,1], [1,5,1], [4,2,1] ]Output: 6Input: [ [1,2,5], [3,2,1] ]Output: 6Clue: 求出到每个点的最小值, 一直到最后一位。1. 首先设置一个临时的矩阵用来存储加和结果2. 求出第一行和第一列的加和3. 求出内部...原创 2020-08-29 13:03:15 · 137 阅读 · 0 评论 -
62. Unique Paths不同的路径到达终点Python
机器人位于mxn网格的左上角(在下图中标记为“开始”)。机器人只能在任何时间点上下移动。机器人试图到达网格的右下角(在下图中标记为“完成”)。有多少种可能的独特路径?原创 2020-08-25 10:42:39 · 193 阅读 · 0 评论 -
56. Merge Intervals合并中间的数Python
给定间隔的集合,合并所有重叠的间隔。每个sublist都有两个数,并且左侧小于等于右侧。Input:intervals = [[1,3],[2,6],[8,10],[15,18]]Output:[[1,6],[8,10],[15,18]][1,3],[2,6]重叠,合并成[1,6]Input:[[1,4],[4,5]]Output:[[1,5]]Method 1 对原list进行合并操作1. 将list排序之后遍历每个list里面的子集intervals=sorted(in.原创 2020-08-24 11:45:21 · 241 阅读 · 0 评论 -
49. Group Anagrams将组成相同的单词合并为一组Python
给定一个字符串,将字母颠倒的合并为一组。Input:strs=["eat", "tea", "tan", "ate", "nat", "bat"]Output:[['eat', 'tea', 'ate'], ['tan', 'nat'], ['bat']]Method1 setdefault运用1. 既然字母顺序不确定,为了看是否是相同的一组,就用sorted()给他们做一个排序。这时,strs里面中的每一组字符串变为:['a', 'e', 't'],['a', 'e', 't'],['原创 2020-08-23 06:34:58 · 395 阅读 · 0 评论 -
55. Jump Game蹦蹦游戏Python & Java
给定一个非负整数数组,您最初位于该数组的第一个索引处。数组中的每个元素代表该位置的最大跳转长度。确定您是否能够达到最后一个索引。类似于第45题Input:nums = [2,3,1,1,4]Output: TrueInput: [3,2,1,0,4]Output: False1. 初始化一个index=0用来判断能否蹦到最后一个位置2. 遍历所有的数,如果当前的数加上当前的位置大于等于index(即目前可以跳到最远的位置),那就把index的值更新if cur+nums[cur.原创 2020-08-18 10:38:25 · 163 阅读 · 0 评论 -
48. Rotate Image旋转矩阵Python
输入一个表示图像的nxn2D矩阵。将图像旋转90度(顺时针)注意:必须就地旋转图像,这意味着您必须直接修改输入2D矩阵。不要分配另一个2D矩阵并进行旋转。Input: matrix=[[1,2,3],[4,5,6],[7,8,9]]Output:[[7,4,1],[8,5,2],[9,6,3]]上面为数字下面为旋转后之前的行列位置由于不可以用其他矩阵,将数存入新的矩阵的想法流产,但是可以作为参考n = np.arange(1, 17).reshape([4,4])...原创 2020-08-16 07:41:46 · 416 阅读 · 0 评论 -
46. Permutations排列Python
给定一组不相等的整数,返回所有排列。Input:[1,2,3]Output:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]Method 1迭代,定义一个临时的空list,for循环每次先判断这个数是否存在temp里面,如果不存在就存贮到temp。当temp长度与nums长度相同时,将temp存到需要输出的res中。思路与39题类似。class Solution: def permute(self, nums: List[.原创 2020-08-04 06:43:43 · 215 阅读 · 0 评论 -
45. Jump Game II蹦蹦游戏II Python&Java
给定一个非负整数数组,您最初位于该数组的第一个索引处。数组中的每个元素代表该位置的最大跳转长度。目标是在最少的跳数中达到最后的索引。Input:[2,3,1,1,4]Output:2 (第一步从2到3, 然后从3到4)Clue: 其实就每次选择当前数值A的后A位最大值B的位置, 然后以以B为标准重复选择后面B个数的最大值直到最后。class Solution: def jump(self, nums: List[int]) -> int: if len(num原创 2020-08-03 10:42:42 · 146 阅读 · 0 评论 -
42. Trapping Rain Water接水Python
给定n个表示高度的非负整数,其中每个条的宽度为1,计算下雨后它能捕获多少水。Input:[0,1,0,2,1,0,1,3,2,1,2,1]Output:6Method 1以数组中最大值为标准,area=max×len(height)。每次循环都减掉没有达到最大值的部分的那层。如下图,第一次减掉黄色的部分,第二次减掉蓝色的部分,第三次减掉粉色的部分。最后结果减掉所有数的和,剩下的就是装水量。用l和r代表左右两侧,每次l从0开始,r从数组的长度开始向中间合并。当l或者r位置的值小于数原创 2020-08-01 12:30:02 · 174 阅读 · 0 评论 -
41. First Missing Positive查找list中缺少的最小正整数Python
给定一个未排序的数组,查找出里面缺少的最小正整数。Input Output [1,0,2] 3 [3,2,4,1] 5 [0,2,-1] 1 Clue: 从1开始到数组中的最大值,如果这个数没有在数组中出现则返回这个数。为了防止数组为空或者里面的数都小于1,所以最后要返回1。6行解决。line1-2:数组为空返回1line3-5:数组不存在当前的数,max(nums)+2是因为当数组中最大值是1时,需要将循环进行2次。for循环的range是左闭右开.原创 2020-07-31 07:31:51 · 757 阅读 · 0 评论 -
39. Combination Sum组合加和等于特定值Python
给定一组候选编号candidates(没有重复项)和特定值target,找到candidates候选数总和为的所有唯一组合target。candidates里面的数可以重复。Input:candidates=[2,3,4,7] target=7Output:[[2,2,3],[2,2,4],[7]]Clue:运用迭代方法1. 定义一个函数,里面包括i,path两个变量分别表示在candidates的数字位置和存储目前位置进行加和操作的数字。如果>target则终止迭代;如果=targ.原创 2020-07-31 05:05:06 · 470 阅读 · 0 评论 -
34. Find First and Last Position of Element in Sorted Arra在升序数组中查找元素的第一个和最后一个位置Python
给定一个以升序排列的整数nums数组,找到给定目标值的开始和结束位置。如果不存在数组中则返回[-1, -1]算法的时间复杂度需为O(logn)Input:nums = [5,7,7,8,8,10], target = 8Output: [3, 4]Input:nums = [5,7,7,8,8,10], target = 8Output: [-1, -1]Clue: 同33题思路,用二分法。定义左右中间三个变量(l,r,mid),左右分别为等于target时的开始和结尾;-&..原创 2020-07-29 07:38:09 · 89 阅读 · 0 评论 -
33. Search in Rotated Sorted Array搜索旋转排序数组Python
假设以升序排序的数组在事先未知的某个轴上旋转。即[0,1,2,4,5,6,7]可能成为[4,5,6,7,0,1,2])。将为您提供要搜索的目标值target。如果在数组中找到,则返回其索引,否则返回-1。注:假定数组中不存在重复项。算法的运行时复杂度必须为O(logn)。Input: nums=[4,5,6,7,0,1,2] target: 4Output: 0Input: nums=[4,5,6,7,0,1,2] target=3Output: -1Method...原创 2020-06-28 12:02:28 · 171 阅读 · 0 评论 -
32. Longest Valid Parentheses最长有效括号Python
给定仅包含字符'('和')'的字符串,请找到最长的有效(格式正确)括号子字符串的长度。Input: '(()'Output: 2 '()'长度为2Input: ')()())'Output: 4 '()()'长度为4Method 1遍历所有连续的子括号,如果有效则取最大的长度(Time Limit Exceeded超时)首先利用之前22题第二个方法判断括号是否有效的函数判断是否有效。然后遍历连续括号,括号要限定以‘(’为开头。将括号添加到一个新的变量res中,如果满足有效括号..原创 2020-06-26 10:53:20 · 164 阅读 · 0 评论 -
23. Merge k Sorted Lists合并k个排序链表
合并k个排序的链表,并将其作为一个排序表返回。分析并描述其复杂性。Input:[ 1->4->5, 1->3->4, 2->6 ]Output:1->1->2->3->4->4->5->6Clue: 建立一个list将节点对应的值存到list里面,然后对list进行排序, 将里面的点输出为ListNode形式# Definition for singly-linked list.# class Lis...原创 2020-06-25 11:43:35 · 162 阅读 · 0 评论 -
22. Generate Parentheses产生括号Python
给定n对括号,编写一个函数以生成格式正确的括号的所有组合。Input: n=3Output:["((()))","(()())","(())()","()(())","()()()"]原创 2020-06-21 06:54:21 · 169 阅读 · 0 评论 -
21. Merge Two Sorted Lists合并两个有序链表Python
合并两个排序的链表,并将其作为新列表返回。应通过将前两个列表的节点拼接在一起来创建新列表。Input: [1,2,3],[1,1,4]Output:[1,1,1,2,3,4] dummy=ListNode(-1) s=dummy while l1 and l2: if l1.val<=l2.val: ...原创 2020-05-08 10:22:05 · 353 阅读 · 0 评论 -
20. Valid Parentheses判断括号是否匹配Python
给定仅包含字符'(',')','{','}','['和']'的字符串,请确定输入字符串是否有效。 输入字符串在以下情况下有效:1. 开括号必须用相同类型的括号封闭2. 开括号必须以正确的顺序关闭3. 空字符串也被视为有效。Input: ""Output: TrueInput: '([)]'Output: FalseInput:'({[]})'Output: Tr...原创 2020-05-07 11:12:07 · 145 阅读 · 0 评论 -
19. Remove Nth Node From End of List从链表结尾删除第n个节点Python
给定一个链表,从列表末尾删除第n个节点并返回其头。Input:1->2->3->4->5, n=2Output:1->2->3->5Method 1 将链表转为list删掉指定位置数字之后, 转为链表输出1. 将链表中的数字存入list中{l=[] ; while head: l.append(head.val) head=head.next}2.删除倒数第n个数字然后将list中的...原创 2020-06-18 11:28:42 · 252 阅读 · 0 评论 -
17. Letter Combinations of a Phone Number电话号码的字母组合Python
给定一个包含数字(2-9包含在内)的字符串,请返回该数字可以表示的所有可能的字母组合。下面给出了数字到字母的映射(就像在电话按钮上一样)。请注意,1不会映射到任何字母。Input: '22'Ouput:['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc']Clue: 建立字典,然后迭代。迭代:需要一个当前进行操作的数字和接下来需要操作的数字。{def dd(cur,next): if next: ...原创 2020-06-18 06:31:08 · 165 阅读 · 0 评论 -
15. 3Sum三个数加和等于0Python
给定一个由n个整数组成的数组,是否存在以a + b + c = 0的元素a,b,c?在给出零和的数组中查找所有唯一的三元组。注意:给出的3个数一组的结果不能重复Input:[-1,0,1,2,-1,-4]Output:[[-1,-1,2], [-1,0,1]]Clue: 将list排序之后, 用for循环遍历里面的数字i, 设置一个l表示i后面的数, r表示排序后list右面的数。如果i和之前的i数字重复则跳过,因为结果不能重复。1. 对list进行排序,建立一个空的list用来原创 2020-06-17 13:14:11 · 778 阅读 · 0 评论 -
11. Container With Most Water最多装多少水Python
给定n个非负整数a1,a2,...,an,其中每个代表坐标(i,ai)上的一个点。绘制n条垂直线,使线i的两个端点位于(i,ai)和(i,0)处。找到两条线,它们与x轴一起形成一个容器,以便该容器包含最多的水。注意:不会倾斜容器,并且n至少为2Input:[1,8,6,2,5,4,8,3,7]Output: 49Clue: 从左右两侧开始算每一次的最大容水量, 最大容水量要以两者最小值为基础class Solution: def maxArea(self,...原创 2020-06-16 15:21:24 · 146 阅读 · 0 评论 -
10. Regular Expression Matching正则表达式匹配Python
给定一个输入字符串s和一个模板p,实现支持'.'的正则表达式匹配和'*',p必须涵盖所有s中的字符串。.;可以表示任何单一字符串*:可以表示0个或者多个前一个字符假设s由a-z字母组成,p由a-z和.*组成Input Output s='ab' p='.*' True(.=a,;*=.=任意字符=b) s='aab' p='c*a*b' True(p=c0aab) s='mississippi' p='mis*is*p*.' False(p=mi...原创 2020-06-15 08:28:13 · 188 阅读 · 0 评论 -
5. Longest Palindromic Substring最长子回文字符串Python
给定字符串s,找到s中最长的回文子字符串。您可以假设s的最大长度为1000。Input Output "" "" "abc" "a" "ababc" "bab" Method 1 建立两个循环, 遍历每个子字符串判断是否为palindromic1. 如果字符串为空则需要返回空2. 如果字符串没有回文,则需要返回第一个字母3. 如果后面的palindromic substring比之前的长度长, 需要替换掉之前的判断是否为回文用125题的方法, 将字原创 2020-06-14 06:15:52 · 180 阅读 · 0 评论 -
4. Median of Two Sorted Arrays两个有1序数组的中位数Python
有两个分别为大小m和n的排序数组nums1和nums2。找到两个排序数组的中位数。总体运行时复杂度应为O(log(n+m))。 假设nums1和nums2不能都为空。 nums1 nums2 Median A [2] [] 2 B [3] [-2,-1] -1 C [1,3,4] [-2,5,6] 3.5 题中的中位数是相当于把nums1和nums2合并之后从小到大排序中间的数, 不考虑时间复杂度可以用sor..原创 2020-06-12 13:54:15 · 120 阅读 · 0 评论 -
3. Longest Substring Without Repeating Characters最长不包含重复字符的子字符串Python
给定一个字符串,找到最长子字符串的长度而不重复字符。Input: 'pwwkew'Output: 3(wke)Method 1 找到所有substring中长度最大的1. 建立一个变量用来存储最大字符串长度(maxlen=0)2. 两个for循环, 一个设定为子字符串的开头(i)另一个为了遍历它后面所有的字符(j),如果j与前面的字符重复就停止第二层循环。3. 每次遍历完j之后, 都要比较一下当前的字符串长度与之前运算过的字符串长度的最大值class Solution:原创 2020-06-11 13:11:05 · 161 阅读 · 0 评论 -
2. Add Two Numbers链表两个数加和Python
两个表示两个非负整数的非空链表l1, l2。这些数字以相反的顺序存储,并且它们的每个节点都包含一个数字。将两个数字相加,并将其作为链接列表返回。假定两个数字除了数字0本身以外都不包含任何前导零。Input: l1=[9->1] l2=[9->9->9]Output: [8->1->0->1]开始竟然想把它们转换为list加完转换为link-list, 感觉这样有点蠢, 换了个思路:1. 新建一个链表,对l1和l2进行按位加和,并且把每一次加和的值(val)原创 2020-06-10 14:08:04 · 239 阅读 · 0 评论 -
1. Two Sum查找列表中两数加和等于特定值Python & Java
给定一个整数数组,返回两个数字的位置,以便它们加起来成为一个特定值。假设每个输入都只有一个解决方案,并且不会两次使用同一元素。Input: [2, 7, 11, 15],target:9Output:[0, 1]因为肯定会有两个数相加等于target, 并且是有序list, 所以遍历list里面的数时按顺序就可以Method 1 两层循环遍历list每次对第i个数字进行操作, 判断其后面的数与它相加是否等于targetclass Solution: def twoSum(s原创 2020-06-10 05:19:05 · 1715 阅读 · 0 评论