LeetCode(Medium)
文章平均质量分 51
链表:2.19
weixin_...
这个作者很懒,什么都没留下…
展开
-
1567. Maximum Length of Subarray With Positive Product具有正积的子阵列的最大长度Java
给定一个整数数组nums,找出所有元素乘积为正的子数组 的最大长度。数组的子数组是从该数组中取出的零个或多个值的连续序列。返回 具有正积的子数组的最大长度。示例 1:输入: nums = [1,-2,-3,4]输出: 4解释:数组 nums 已经有 24 的正乘积。示例 2:输入: nums = [0,1,-2,-3,-4]输出: 3解释:具有正积的最长子数组是 [1,-2,-3],其积为 6。请注意,我们不能在子数组中包含 0,因为这会使乘积 0 不是正数。示例 3:输入: nu原创 2021-11-20 10:59:57 · 371 阅读 · 0 评论 -
152. Maximum Product Subarray最大乘积子阵列Java
给定一个整数数组nums,在数组中找到一个连续的非空子数组,该子数组具有最大的乘积,并返回乘积。可以保证答案适合32 位整数。子阵列是所述阵列的连续子序列。示例 1:输入: nums = [2,3,-2,4]输出: 6解释: [2,3] 有最大的乘积 6。示例 2:输入: nums = [-2,0,-1]输出: 0解释:结果不能是 2,因为 [-2,-1] 不是子数组。约束:1 <= nums.length <= 2 * 104-10 <= nums[i] <原创 2021-11-20 09:52:46 · 216 阅读 · 0 评论 -
918. Maximum Sum Circular Subarray最大和环形子阵列Java
给定一个圆形整数数组 nums长度的n,返回一个非空的最大可能的总和子阵列的nums。甲圆形阵列装置阵列连接到阵列的开头的结束。从形式上看,下一个元素nums[i]就是nums[(i + 1) % n]和以前的元素nums[i]就是nums[(i - 1 + n) % n]。一个子数组nums最多只能包含固定缓冲区的每个元素一次。形式上,对于一个子数组nums[i], nums[i + 1], …, nums[j],不存在i <= k1,k2 <= j与k1 % n == k2 % n。示原创 2021-11-17 13:30:27 · 281 阅读 · 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 · 161 阅读 · 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 · 158 阅读 · 0 评论 -
213. House Robber II抢劫房子2 Java
你是一名职业劫匪,计划抢劫街道上的房屋。每个房子都藏着一定数量的钱。这个地方的所有房屋都排成一个圆圈。这意味着第一个房子是最后一个房子的邻居。同时,相邻的房屋都连接了一个安全系统,如果同一天晚上有两个相邻的房屋被闯入, 它会自动报警。给定一个nums表示每所房子的钱数的整数数组,返回你今晚可以在不惊动警察的情况下抢劫的最大金额。示例 1:输入: nums = [2,3,2]输出: 3解释:你不能先抢房子 1(钱 = 2)然后再抢房子 3(钱 = 2),因为它们是相邻的房子。示例 2:输入: n原创 2021-11-06 04:58:32 · 93 阅读 · 0 评论 -
198. House Robber抢劫房子Python & Java
list中求不相邻的数的和的最大值。下面是leetcode不学好,叫程序员抢劫的原话:你是一个计划抢劫沿街房屋的职业抢劫犯。每所房子都有一定数量的现金,阻止你抢劫的唯一限制是相邻的房子都有连接的安全系统,如果两个相邻的房子在同一个晚上被闯入,它会自动联系警察。给定一个表示每所房子的钱的非负整数列表,确定今晚你可以在不报警的情况下抢劫的最大金额。Input:[2,7,9,3,1]Output:12(2+9+1)Input:[2,1,1,2]Output:4开始只想隔一个相加求和取原创 2020-06-05 14:42:05 · 187 阅读 · 0 评论 -
189. Rotate Array旋转数组Python & Java
给定一个数组,将数组向右旋转k步,其中k为非负数。尝试提供尽可能多的解决方案,至少有3种不同的方法来解决此问题。 能否在O(1)的额外空间内就地执行此操作?Input:nums = [1,2,3,4,5,6,7], k = 3Output: [5,6,7,1,2,3,4]PS:1 <=数字长度<= 2 * 10 ^ 4 ;保证nums [i]可以容纳32位有符号整数;k> = 0class Solution: def rotate(self, nums: ..原创 2020-06-01 09:06:21 · 185 阅读 · 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 · 146 阅读 · 0 评论 -
62. Unique Paths不同的路径到达终点Python
机器人位于mxn网格的左上角(在下图中标记为“开始”)。机器人只能在任何时间点上下移动。机器人试图到达网格的右下角(在下图中标记为“完成”)。有多少种可能的独特路径?原创 2020-08-25 10:42:39 · 205 阅读 · 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 · 286 阅读 · 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 · 405 阅读 · 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 · 178 阅读 · 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 · 460 阅读 · 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 · 244 阅读 · 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 · 484 阅读 · 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 · 103 阅读 · 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 · 203 阅读 · 0 评论 -
22. Generate Parentheses产生括号Python
给定n对括号,编写一个函数以生成格式正确的括号的所有组合。Input: n=3Output:["((()))","(()())","(())()","()(())","()()()"]原创 2020-06-21 06:54:21 · 204 阅读 · 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 · 290 阅读 · 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 · 203 阅读 · 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 · 810 阅读 · 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 · 183 阅读 · 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 · 213 阅读 · 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 · 183 阅读 · 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 · 267 阅读 · 0 评论