![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode数组
文章平均质量分 56
岗岗ganggang
这个作者很懒,什么都没留下…
展开
-
leetcode 653. 两数之和 IV - 输入 BST python
题目描述:题解一:双指针1.二叉搜索树的中序遍历结果为一个升序数组,将输入root中序遍历结果保存在数组result中。2.对result数组利用双指针进行查找,left=0 right = len(nums)-1,如果找到一组result[left]+result[right]=k,则返回True,否则返回False。# Definition for a binary tree node.# class TreeNode:# def __init__(self..原创 2021-12-30 21:28:12 · 367 阅读 · 0 评论 -
剑指 Offer II 007. 数组中和为 0 的三个数python
题目描述:题解一:回溯 超时class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: result = [] def helper(nums,start,nowl,nowsum): if len(nowl)==3 and nowsum==0 and sorted(nowl) not in result: r.原创 2021-12-30 16:45:36 · 546 阅读 · 0 评论 -
leetcode 376. 摆动序列 python
题目描述:题解:1.如果输入nums只有一个元素返回1,如果nums有两个元素,如果两个数字不等则返回2,否则返回1.2.计算nums数组中相邻数字的差,保存在gaps数组。最终摇摆序列的长度=max(第一个差值为正数的序列最长长度,第一个差值为负数的序列最长长度)+1,分别用p_len n_len记录第一个差值为正数和负数的序列长度,p_start,n_start分别记录差值为正数和负数的开始位置。3.分别从p_start依次寻找差值为负,正,负....记录长度,n_start做.原创 2021-12-20 15:48:15 · 788 阅读 · 0 评论 -
leetcode 54. 螺旋矩阵 python
题目描述:题解:1.逆时针的遍历顺序为:右 下 左 上,定义一个directions的list,分别对应这四个方向。如果当前方向的下一个位置到达matrix边界或者已经被访问过,则变换为下一个方向。2.定义一个和输入matrix大小相同的flag数组,初始化为全0,记录[i,j]位置是否被访问过,dir_idx表示当前沿着directions数组中的第几个方向进行遍历,result记录结果。3.posx posy分别表示当前位置的坐标,初始化为0,dir_idx也初始化为0,将当前.原创 2021-12-16 19:49:17 · 272 阅读 · 0 评论 -
leetcode 剑指 Offer 39. 数组中出现次数超过一半的数字python
题目描述:题解一:1.用一个dict记录nums数组中每个数字出现的次数。2.返回dict中出现次数大于数组长度一半的数字。class Solution: def majorityElement(self, nums: List[int]) -> int: length = len(nums) numsdict = {} for num in nums: if num not in numsdict:原创 2021-12-16 10:58:20 · 668 阅读 · 0 评论 -
剑指 Offer 41. 数据流中的中位数python
题目描述:题解:思路:维护一个有序队列,在获取中位数的时候,若为奇数,直接返回相应下标对应的值,若为偶数,返回中间两个下标对应数字的平均数。1._init_初始化函数:创建一个list array,number保存array中元素的数量,初始化为0.2.addNum函数,将num添加到array对应的位置,使添加后的array仍然有序。分三种情况:array为空,num大于等于array中最大的数字,num对应的位置在array中间。3.findMedian函数:根据number的.原创 2021-12-10 10:05:25 · 197 阅读 · 0 评论 -
leetcode794. 有效的井字游戏python
题目描述:题解:1.利用state 一个3*3的数组记录输入board的状态,如果board对应位置为X则将state对应位置设为1,如果是O则将state对应位置设为0,利用xnum onum记录board中X和O数量。2.如果onum>xnum 或xnum onum之差大于1,则返回False(因为两个玩家总是交替下棋,并且玩家1先下)3.分别计算state每行,每列,两个对角线位置的值之和,如果和为3,flag1+1,如果为0,flag2+1,flag1 2分别对应.原创 2021-12-09 16:53:39 · 2857 阅读 · 0 评论 -
剑指 Offer 61. 扑克牌中的顺子python
题目描述:即判断输入nums中的5个数字是否连续,其中0可以转化为任何数字。题解:1.确定输入nums对应的范围,maxnum=max(nums),minnum=maxnum-4(minnum应该由maxnum确定,因为可能nums中存在0)2.将minnum到maxnum对应的数字保存在一个数组tomatch中。3.计算nums中0的个数zero_num。4.依此判断tomatch[i]是否在nums中存在,记录找到的个数matchnum。5.用总数5减去matchnum,原创 2021-12-09 10:56:49 · 200 阅读 · 0 评论 -
leetcode 121. 买卖股票的时机 python
题目描述:题解:第i天卖出可获取的最大利益=prices[i]-min,min为前i-1天的最低价格1.buy记录前i-1天最低价格,初始化为prices[0],earn记录最大利润,初始化为-1。2.从prices[1]开始遍历prices,earn=max(earn,prices[i]-buy) buy=min(buy,prices[i])class Solution: def maxProfit(self, prices: List[int]) -> int:.原创 2021-12-08 11:14:53 · 64 阅读 · 0 评论 -
leetcode 1014. 观光组合Best Sightseeing Pair python
题目描述:题解一:超时class Solution(object): def maxScoreSightseeingPair(self, values): nums = len(values) dp = [0 for i in range(nums)] for i in range(nums): for j in range(i+1,nums): dp[i] = max(dp[i],原创 2021-12-08 11:03:02 · 1312 阅读 · 0 评论 -
leetcode 1567. 乘积为正数的最长子数组长度python
题目描述:题解:动态规划1.维护两个数组: dppos[i]表示以nums[i]结尾的积为正数的子数组长度,dpneg[i]表示以nums[i]结尾的积为负数的子数组长度,初始化为全0,如果nums[0]>0则dppos[0]=1,如果nums[i]<0则dpneg[0]=12.如果nums[i]>0,则dppos[i]=dppos[i-1]+1,对dpneg的处理比较特殊,如果dpneg[i-1]为0,那么dpneg[i]仍然应该为0.比如数组[0,1],0对应.原创 2021-12-07 16:23:32 · 210 阅读 · 0 评论 -
leetcode 152. 乘积最大子数组 python
题目描述:题解:动态规划1.维护两个变量,maxres和minres,在nums[i]位置的maxres=max(maxres*nums[i],nums[i])minres = min(minres*nums[i],nums[i])2.如果nums[i]为负数,交换minres和maxres的值。class Solution: def maxProduct(self, nums: List[int]) -> int: maxres = 1原创 2021-12-07 15:52:57 · 101 阅读 · 0 评论 -
leetcode918. 环形子数组的最大和python
题目描述:题解:参考918. 环形子数组的最大和(Python) - 简书思路:如果数组被分为三段ABC,如果子数组和最大的在C+A段,那么子数组和最小的部分在B段。1.先按照非环形数组采用动态规划的方法,求出数组中子数组的最大和res。2.同样采用动态规划的方法,求出子数组最小和res_min3.环形数组的子数组最大和为res和sum(nums)-res_min中的最大值。注意:如果输入数组全为负数,则返回数组中最大值。class Solution(objec..原创 2021-12-06 17:26:05 · 434 阅读 · 0 评论 -
剑指 Offer 57. 和为s的两个数字python
题目描述:题解:双指针1.left=0 right=len(nums)-1,list result保存结果2.如果nums[right]>target :right--,如果nums[left]+nums[right]>target : right--,如果nums[left]+nums[right]<target,则left++,如果nums[left]+nums[right]==target,则将nums[left] nums[right]加入result,然后结束循.原创 2021-12-06 15:28:43 · 165 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面python
题目描述:题解一:创建两个list,遍历nums,如果当前是奇数,加入第一个list,否则加入第二个,然后将list2加在list1之后。class Solution(object): def exchange(self, nums): list1 = [] list2 = [] for num in nums: if num%2==1: list1.append(num)原创 2021-12-06 15:20:32 · 115 阅读 · 0 评论 -
leetcode 1005. K 次取反后最大化的数组和 python
题目描述:题解:思路:1.如果nums数组全都为非负数:<1>k为偶数,可以选择同一个数字变化k次,最终和原来一致,因此最大和为sum(num)<2>k为奇数,则nums中肯定有一个数字要变得和原来相反,因此对nums数组排序,选择将nums[0]取反,最大和为sum(num[1:)-num[0]2.如果nums数组存在负数对nums数组进行排序,从第一个负数开始替换为相反数,直到没有负数或k=0<1>如果k=0,直接返回sum..原创 2021-12-03 16:26:17 · 211 阅读 · 0 评论 -
leetcode 48. 旋转图像python
题目描述:题解:参考:LeetCode-Python-48. 旋转图像_Keep Coding-CSDN博客1.先对矩阵进行转置2.转之后的矩阵每行反转1 2 3 -> 1 4 7 -> 7 4 14 5 6 2 5 8 8 5 27 8 9 ...原创 2021-12-03 15:43:25 · 341 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字python java
题目描述:题解一:直接搜索最小值其实题目要求就是找到输入数组numbers的最小数字,其中numbers数组分为两段增序排列,最小值为第二段增序的第一个元素。class Solution(object): def minArray(self, numbers): minnum = numbers[0] for i in range(1,len(numbers)): if numbers[i]<minnum:原创 2021-11-28 11:59:05 · 479 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找python
题目描述:题解:1.因为输入matrix的每行都是增序排列,因此将每行第一列数字matrix[row][0]和每行最后一个数字matrix[row][cols-1]比较,如果target在这两个数字范围内,则target有可能在该行之中。2.用一个列表targetrows记录满足1的条件的行号。3.对targetrows中的每行进行搜索,找到target则返回True,否则Fasle。class Solution(object): def findNumberIn2DAr.原创 2021-11-28 11:46:03 · 275 阅读 · 0 评论 -
leetcode 519. 随机翻转矩阵 python
题目描述:题解:参考519. leetcode题目讲解(Python):随机翻转矩阵(Random Flip Matrix ) - 简书此题的关键不在于记录数组中对应位置的值,而是记录哪些位置被从0翻转为1,然后从剩余位置中随机选择一个位置,本来想用二维数组分别记录row col坐标。1.init函数中,创建一个flipped set,记录被翻转过的位置,start初始化为0,end初始化为rows*cols-1,表示可选的位置范围。2.flip函数中,从start-..原创 2021-11-27 21:01:42 · 300 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字python
题目描述:题解:1.将输入nums数字保存在一个dict里。2.遍历从0-lennums+1的数字,如果不在dict里则返回。class Solution(object): def missingNumber(self, nums): mydict = {} for num in nums: mydict[num]=1 lennums = len(nums) for i in range(0原创 2021-11-27 18:12:51 · 186 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I python
题目描述:题解:遍历数组nums,如果当前值等于target,次数加一。class Solution(object): def findRepeatNumber(self, nums): numsdict = {} for num in nums: if num in list(numsdict): return num else: num原创 2021-11-27 18:03:55 · 170 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字python
题目描述:题解:1.用dict保存nums的数字和出现次数。2.遍历nums的时候,如果当前值在dict中存在说明重复,否则加入dict。class Solution(object): def findRepeatNumber(self, nums): numsdict = {} for num in nums: if num in list(numsdict): return num原创 2021-11-27 17:57:57 · 102 阅读 · 0 评论 -
leetcode 384. 打乱数组 python
题目描述:题解:1._init_函数中将输入nums保存在self.nums。2.reset返回self.nums。3.shuffle函数中构造new_nums为self.nums的拷贝,然后每次随机一个下标,将对应值添加到res。class Solution(object): def __init__(self, nums): self.nums = nums self.n = len(nums) def reset(self.原创 2021-11-22 16:11:20 · 478 阅读 · 0 评论 -
leetcode 594. 最长和谐子序列python
题目描述:题解:本来打算用滑动窗口,但题目要求的子序列也不是连续的。1.用一个dict记录nums中每个数字出现的次数,key为数字,value为出现的次数。原创 2021-11-20 14:43:23 · 334 阅读 · 0 评论 -
leetcode 319. 灯泡开关 python
题目描述:题解一:模拟整个过程(超时)1.初始化代表n个灯泡,第一轮之后全部初始化为12.第二轮每两个将一个从1变为03.模拟第i轮,将第i个灯泡状态反转class Solution(object): def bulbSwitch(self, n): if n==0: return 0 if n==1: return 1 lights = [1 for i in r...原创 2021-11-15 15:35:46 · 762 阅读 · 0 评论 -
leetcode 520. 检测大写字母 python
题目描述:题解:1.遍历输入字符串word的每一个字符,将其中的大写字母位置记录在pos中。2.判断pos:<1>如果len(pos)和word长度相同,说明是全部大写的情况。<2>如果len为空,对应全部小写的情况。<3>如果len长度为1,并且对应的位置序号为0,对应首字母大写的情况。其他情况全部返回False。class Solution(object): def detectCapitalUse(self, word.原创 2021-11-13 11:56:13 · 310 阅读 · 0 评论 -
leetcode 1. 两数之和 python+java
leetcode第一题,之前用python做过了,最近在学习java,用java再次做了一次。python:class Solution(object): def twoSum(self, nums, target): mylen = len(nums) for i in range(mylen): for j in range(mylen): if i!=j:原创 2021-11-11 20:31:50 · 457 阅读 · 0 评论 -
leetcode 31. 下一个排列 python
题目描述:题解:此题的关键是:下一个更大的排列如果输入的数组按照降序排列,则当前数组已经是最大的排列,比如[5,4,3,2,1]如果输入数组不是完全降序,即存在一组nums[i-1]<nums[i],比如[5,4,2,3,1],在由1 2 3 4 5组成的数字中肯定存在大于当前值的。关键是如何找到下一个。已知数组左边代表高数位,越往右边代表的数位越低,为了保证是下一个更大的数,如果nums中存在多组nums[i-1]<nums[i]时,处理最右边的那一对,即将num.原创 2021-09-29 16:27:48 · 69 阅读 · 0 评论 -
leetcode 26. 删除有序数组中的重复项 python
题目描述:题解一:采用双指针方法:1.left初始化为0,right初始化为1。2.依次判断nums[left]与nums[right]是否相等,如果相等则移除nums[right]。3.left=right right=left进入下一组判断。class Solution(object): def removeDuplicates(self, nums): left = 0 right = left+1 while r.原创 2021-09-29 11:19:53 · 153 阅读 · 0 评论 -
leetcode 167. 两数之和 II - 输入有序数组 python
题目描述:题解:双指针已知输入numbers数组按递增顺序排列。设置指针left,初始为0,right初始为len(numbers)-1,对每组left right判断numbers[left]+numbers[right]与target的关系:相等:直接返回小于target:left右移大于target:right左移class Solution(object): def twoSum(self, numbers, target): left =原创 2021-09-28 10:44:30 · 63 阅读 · 0 评论 -
leetcode 283. 移动零 python
题目描述:题解一:<1>使用nums.count(0)获得nums中0的数量。<2>使用nums.remove(0)删除nums中第一个0。<3> 向nums结尾添加0。2,3步重复次数为第一步获取的0的个数。class Solution(object): def moveZeroes(self, nums): numof0 = nums.count(0) for i in range(numof0):原创 2021-09-28 10:26:59 · 172 阅读 · 0 评论 -
leetcode 189. 旋转数组 python
题目描述:题解一:采用翻转的方法,参考编程珠玑第二章读书笔记_ganggang的博客-CSDN博客其中2.3基本操作的威力以示例1为例,nums = [1,2,3,4,5,6,7] k=3<1>对nums[0:len(nums)-k]部分即nums[0:4]进行翻转1 2 3 4->4 3 2 1<2>对nums[len(nums)-k:]部分进行翻转5 6 7->7 6 5<3>对前两步处理之后的nums[0:]进行翻转...原创 2021-09-27 10:04:38 · 93 阅读 · 0 评论 -
leetcode 268. 丢失的数字 python
题目描述:题解:1.创建一个mark数组,初始化为[0]*(n+1)。2.遍历nums将nums中的数i在mark中对应位置mark[i]设为1。3.找到mark中值为0的对应位置。class Solution(object): def missingNumber(self, nums): n = len(nums) mark = [0]*(n+1) for num in nums: mark[n.原创 2021-09-15 17:19:06 · 158 阅读 · 0 评论 -
leetcode18. 四数之和
题目描述:题解:参考:https://blog.csdn.net/fuxuemingzhu/article/details/83543296def fourSum(self, nums, target): lennums = len(nums) nums.sort() res = [] i = 0 while i<lennums-3: j=i+1 while j<lennums-2:原创 2021-04-23 17:28:02 · 65 阅读 · 0 评论 -
leetcode16. 最接近的三数之和
题目描述:题解:def threeSumClosest(self, nums, target): lennum = len(nums) gap = float("inf") clossum = float("inf") for i in range(lennum): for j in range(i+1,lennum): for k in range(j+1,lennum): sum = n原创 2021-04-21 15:47:43 · 84 阅读 · 0 评论 -
leetcode8. 字符串转换整数 (atoi)
题目描述:https://leetcode-cn.com/problems/string-to-integer-atoi/题解:提取输入字符串中的合法数字,字符串s可能出现的元素有:数字,空格,正号,负号,其他字符等对第二次出现的空格段,正负号,和所有其他字符及其之后的字符进行摒弃。<1>对s中每个元素进行判断,将合法的数字加入nums,需要注意处理特殊情况。利用end记录是否已经读取到数字,初始化为0,读取过正负符号或数字后设end =1,如果end原创 2021-04-14 14:40:17 · 239 阅读 · 0 评论 -
leetcode7. 整数反转
题目描述:https://leetcode-cn.com/problems/reverse-integer/题解:<1>x=abs(x),将负数转为正数<2>通过在一个while循环中,除10和余10的操作,从各位开始提取x的每个数位,写入nums数组<3>将nums数组转为证书res<4>判断res是否越界,并使res保持与x符号一致def reverse(self, x): weight2 = 1 nums = [原创 2021-04-14 09:39:41 · 99 阅读 · 1 评论 -
leetcode6. Z 字形变换
题目描述:https://leetcode-cn.com/problems/zigzag-conversion/题解:1.超时版<1>定义一个shapez数组,大小为numRows*len(s),初始为全0<2>从字符串s第一个元素开始写入shapez<3>利用row col down right确定位置,将s[i]写入numRows[row][col],然后更新row=row+down col=col+right<4>处理原创 2021-04-13 17:51:43 · 107 阅读 · 0 评论 -
leetcode15. 三数之和
题目描述:https://leetcode-cn.com/problems/3sum/题解:参考https://www.jianshu.com/p/eb18ba9dabf1将nums从小到大排列,遍历nums数组,对每个元素nums[i]执行以下操作:<1>设定两个指针j=i+1 k=len(nums)-1<2>计算nums[i] nums[j] nums[k]之和,若为0,则加入tmp,若在result中为出现过,则将tmp写入res,j+1或k-1(不原创 2021-04-10 21:05:54 · 60 阅读 · 0 评论