自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(268)
  • 收藏
  • 关注

原创 leetcode 708 剑指 Offer II 029. 排序的循环链表 python

题目描述:题解:可以分为三种情况:1.输入head链表为空,创建一个head节点,val等于要插入的值,next指向自身,返回head。2.要插入的值在输入head链表中的某两个节点之间,即存在一个节点cur,nxt=cur,插入的值在这两个节点之之间,cur.val<=insertval<=nxt.val3.要插入的值大于当前head链表中最大值或小于链表中最小值,则应该插入的位置在head链表最大最小值之间,比如示例1,如果要插入的值是0,则应该在4和1之间。即.

2022-01-06 12:20:38 863 1

原创 leetcode445 剑指 Offer II 025. 链表中的两数相加 python

题目描述:题解:栈1.用stack1保存链表l1中节点,stack2保存链表l2中节点值。2.创建一个初始为None的节点,表示进位数字的into,初始为0.3.当stack1或stack2不为空或into不为0的时候执行加法:stack1栈顶元素值保存在a,stack2栈顶元素值保存在b,如果栈为空,则对应的值为0.4.计算a+b+into的值,(a+b+into)%10为当前位的和,(a+b+into)//10为当前位向前一位的进位,更新into。5.创建一个新节点newno

2022-01-05 21:08:11 546

原创 leetcode 647 剑指 Offer II 020. 回文子字符串的个数python

题目描述:题解:中心拓展思路:对每个可能的回文中心分别向两侧进行拓展,判断当前对应的子字符串是否回文。回文中心分为奇数和偶数两种情况。以s=abba,s长度为4为例,可能的回文中心有:a ab b bb b ba a7种,回文中心起始和终止位置如下:第i组回文中心的左右边界分别为:l = i//2 j = l+i%2然后分别判断s[l]与s[j]是否相同,相同则说明找到一个回文字串,然后l r分别向左和向右移动,知道超出范围或两个位置的字符不相等。class Solutio

2022-01-05 10:59:57 617

原创 leetcode 680 剑指 Offer II 019. 最多删除一个字符得到回文

题目描述:题解:1.判断字符串s是否回文,i取值从0到len(s)//2+1,j=len(s)-i-1,如果每组s[i] s[j]都相等,则s回文。2.如果某对s[i] s[j]不想等,判断去掉s[i]或s[j]之后,s是否回文。即s[i+1:j+1](去掉s[i])或者s[i:j](去掉s[j])是否回文。class Solution: def validPalindrome(self, s: str) -> bool: def helper(s):

2022-01-04 21:21:00 545

原创 leetcode 125 剑指 Offer II 018. 有效的回文python

题目描述:题解:1.将输入字符串s中数字和字母依次添加到一个数组中,添加字母的时候将字母全部转为小写形式。2.判断数组中的第i个元素是否与len-i-1相等。class Solution: def isPalindrome(self, s: str) -> bool: l_str = [] for i in range(len(s)): if s[i]>='a' and s[i]<='z':

2022-01-04 21:16:58 201

原创 剑指 Offer II 011. 0 和 1 个数相同的子数组python

题目描述:题解:1.将nums中的1保持不变,将0变为-1,子数组中0 1个数相等即子数组和为0.2.用数组pre_sum保存nums的前缀和,dict_sum键为某个前缀和,值为该前缀和对应的序号i,即nums[0]到nums[i]的和对应的值为i。3.计算前缀和,保存在pre_sum[-1]中,如果dict_sum中存在pre_sum[-1]的键,则说明i-dict_sum[pre_sum[-1]]段的子数组和为0,如果pre_sum[-1]不在dict_sum中,则将其加入,对应的

2022-01-03 20:19:16 443

原创 剑指 Offer II 010. 和为 k 的子数组python

题目描述:题解:前缀和由于题目说明中输入nums数组中可能存在负数,因此滑动窗口的方法不适用。1.创建一个pre_sum数组,pre_sum[0]=0,记录nums数组的前缀和。2.创建一个dict sum_dict,记录前缀和为某个值的子数组数量,初始化返回值ret=0。3.每次计算出一个前缀和pre_sums[-1],将其值减k,如果pre_sums[-1]-k在sum_dict存在,则返回值ret加上sum_dict对应的value值。4.如果pre_sum[-1]在sum

2022-01-03 10:44:55 311

原创 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 358

原创 剑指 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 531

原创 剑指 Offer II 005. 单词长度的最大乘积python

题目描述:题解:思路:1.用一个int数字word_int[i]表示words[i]的字母出现情况。2.如果word_int[i]和word_int[j]按位与操作结果为0,说明words[i]与words[j]无重复字符。3.python按位与操作符&,按位或|,按位异或^。python中char转int ord(char),int转char char(int)class Solution: def maxProduct(self, words: List[s

2021-12-30 11:00:32 236

原创 剑指 Offer II 004. 只出现一次的数字 python

题目描述:题解一:dict用一个dict分别记录nums数组中每个数字出现的次数,然后返回只出现一次的数字。class Solution: def singleNumber(self, nums: List[int]) -> int: numdict = {} for num in nums: if num in numdict: numdict[num]=numdict[num]+1

2021-12-29 09:47:52 156

原创 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数python

题目描述:题解:参考力扣对数字num,num = num&(num-1)将num最后一个1转为0,因此对num执行该操作的次数就是num中二进制1的位数。比num=1111为例,1111&(1111-1)=1111&1110=1110 1110&(1110-1)=1110&1101=1100 1100&(1100-1...

2021-12-28 20:37:00 132

原创 剑指 Offer II 002. 二进制加法python

题目描述:题解:1.定义一个add函数,有a b c三个输入参数,分别对应两个加数和一个进位,innum,resnum两个返回参数,分别对应向前一位的进位和这一位的结果。如果a+b+c>=2,innum = 1,resnum = a+b+c-innum2.判断输入a b两个参数长度是否相等,如果不想等,则将a b中较短的前面补0。3.从a b最后一位开始调用add函数,结果保存在result数组中,然后将result数组按照逆序输出为字符串。class Solution:.

2021-12-28 18:05:11 583

原创 剑指 Offer 44. 数字序列中某一位的数字python

题目描述:题解:1.若n<10,则n对应0-9的一位数,直接返回n即可。2.对于n>10情况,先将n-10,减去前面10个一位数,设置三个变量:<1>digit表示当前数字数位,如0-9 digit=1,10-99 digit=2,初始化为2。<2>start表示当前digit数位的开始数字,比如digit=2 start=10,digit=3 start=100。<3>num表示数位=digit有多少个数字,digit=2,两位数

2021-12-25 15:48:37 457

原创 剑指 Offer 37. 序列化二叉树python

题目描述:题解:参考:力扣二叉树的前 中 后序遍历对应的二叉树不唯一,完整表示二叉树需要把null空节点也记录。二叉树的序列化:借助队列1.创建一个队列queue,初始时只有root节点,创建一个list,初始为空,保存序列化结果。2.每次取出队列中第一个节点node,判断node是否为空节点,如果不是则将node.val加入result,然后将node的左右子节点加入队列,如果node为空节点,则直接在result中添加null。以题目示例中的二叉树为例:...

2021-12-23 16:17:52 829

原创 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 758

原创 剑指 Offer 59 - II. 队列的最大值python

题目描述:题解:参考:力扣思路:维护两个队列,一个队列queue记录正常的出队入队操作,另一个maxqueue记录最大值。1.pushback时,将value加入queue,如果maxqueue[-1]小于value,则将maxqueue中所有小于value的数字出队,然后再将value加入maxqueue,否则直接入队。2.maxvalue总在maxqueue[0],如果popleft时queue[0]=maxvalue[0],则将maxvalue[0]出队。class M.

2021-12-20 11:26:23 289

原创 剑指 Offer 67. 把字符串转换成整数python

题目描述:题解:1.去除str多余空格。2.首先判断str[0]弟一个字符是否合法,如果str[0]是数字,正负号,则合法,否则直接返回0.3.flag记录数字正负,1为正,-1为负,zero_nums记录之前是否出现过非0数字,用于去掉多余先导0。4.从下标1开始对str遍历,将所有数字保存在nums数组中,如果str[i]出现小数点或字母,i位置之后的数字都视为无效。5.先将nums中保存的数字转为字符串形式判断是否超界,如果没有则将其转为整型数字并返回。clas.

2021-12-20 10:02:10 418

原创 leetcode 剑指 Offer 31. 栈的压入、弹出序列python

题目描述:题解:用栈模拟创建一个栈astack(用list模拟),一个flag记录匹配到popped数组中的位置,将pushed中的每个数字依次压入astack,然后判断,如果当前栈顶的元素与popped数组flag位置匹配,则弹出栈顶元素,如果最终flag值与popped长度相同,则匹配,否则不匹配。class Solution: def validateStackSequences(self, pushed: List[int], popped: List[int]) -&g.

2021-12-18 11:03:44 433

原创 leetcode 221. 最大正方形 python

题目描述:题解:动态规划1.创建dp 大小为(matrix行+1)*(matrix列数+1) 初始化为全02.dp[i][j]表示以[i-1][j-1]为右下角坐标的全1正方形最大边长。如果matrix[i-1][j-1]=='1',dp[i][j]=1+min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])3.返回最大边长值的平方。class Solution: def maximalSquare(self, matrix: List[Lis.

2021-12-17 16:00:28 571

原创 剑指 Offer 62. 圆圈中最后剩下的数字python

题目描述:题解:参考力扣class Solution: def lastRemaining(self, n: int, m: int) -> int: arr = [i for i in range(n)] ans = 0 for i in range(2,n+1): ans = (ans+m)%i return ans

2021-12-17 15:25:29 52

原创 剑指 Offer 57 - II. 和为s的连续正数序列python

题目描述:题解:双指针参考剑指 Offer 57 - II. 和为s的连续正数序列(python)_jhsignal的博客-CSDN博客1.目的是构造一个和等于target的连续数组,i和j表示该数组值(不是下标)的左右边界,初始化为1,窗口的左边界不会超过target的一半,如果左边界超过一半,最终和一定大于target,定义一个list res保存最终结果。2.如果当前i到j的和thesum小于target,则将j加入,j后移一位,如果thesum大于target,则将i从thes.

2021-12-17 11:14:10 157

原创 剑指 Offer 14- I. 剪绳子python

题目描述:题解:1.如果输入n=2,返回1,输入n=3,返回2.2.dp[i]表示长度为i可以得到的最大乘积,dp[1]=1,dp[2]=2,dp[3]=3,因为对于n=2 3的情况,最大值是不做切分,如果输入n<3,已经直接返回,dp是为了确定n>=4的最大乘积。3.n>=4时,对于i取值从1到i//2,取最大的dp[i-j]*dp[j]class Solution: def cuttingRope(self, n: int) -> int: .

2021-12-17 09:46:11 384

原创 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 218

原创 leetcode 1642. 可以到达的最远建筑python

题目描述:题解:思路:先全部使用梯子,如果梯子不够用了,则将高度差最短的位置换为砖头。1.设置一个最小堆gaps记录两个相邻位置的高度差。2.从下标为0的位置开始,如果当前位置高于或等于下一个位置,则直接下移到下一个位置,否则计算两个位置之间的高度差加入gaps。3.如果gaps中元素的数量大于ladders,说明此时梯子已经用完,从gaps中取出一个最小值,替换为砖头,如果砖头也被用完,则返回当前位置。class Solution: def furthestBui

2021-12-16 17:15:02 310

原创 leetcode 304. 二维区域和检索 - 矩阵不可变python

题目描述:题解:矩阵前缀和1.求坐标(0,0)到(i,j)的matrix对应位置之和。图中红色部分=两个绿色部分相加-蓝色部分+[i,j]用thesum[i][j]表示坐标[i,j]到[0,0]的和,thessum[i][j] = thesum[i-1][j]+thesum[i][j-1]-thesum[i-1][j-1]+,matrix[i][j]2.求坐标[i,j]到[m,n]值之和。[m][n]到[i][j]矩阵值之和=红色部分-两个绿色部分+蓝色部...

2021-12-16 11:22:19 293

原创 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 639

原创 leetcode 931. 下降路径最小和 python

题目描述:题解:动态规划1.rows表示输入matrix行数,cols表示matrix列数,设置一个大小和输入matrix相等的dp,dp[rows-1]和matrix[rows-1]相等。2.i从rows-2开始,对dp[i][j]进行更新,dp[i][j]=min(,dp[i+1]pj-1],dp[i+1][j],dp[i+1][j+1])+matrix[i][j],需要注意j=0或cols-1的情况。3.返回dp[0]中的最小值。class Solution: .

2021-12-15 15:15:16 305

原创 剑指 Offer 56 - I. 数组中数字出现的次数python

题目描述:题解一:dict1.利用list result保存最终只出现一次的两个数字,numsdict记录nums每个数字num出现的次数。2.遍历nums,如果当前num不在numsdict中,说明num是只出现一次的数字,或者是出现两次数字的第一次,将num加入result,然后numsdict[num]设置为1。如果num在numsdict中,说明num已经在数组中出现第二次,如果之前num加入了result,则将num从result去掉。class Solution:

2021-12-15 10:46:53 532

原创 leetcode 264. 丑数 II python

题目描述:题解:丑数中每个数字都可以由丑数序列u_numbers中之前的数字乘以2 3 5得到1.用三个idx2 idx3 idx5记录分别用u_numbers中哪个数字乘以2 3 5,idx初始化为0,u_numbers初始化为[1]。2.分别计算u_numbers[idx2]*2u_numbers[idx3]*3u_numbers[idx5]*5,求出三个结果中的最小值next_num,加入u_numbers中,并将对应的idx+1。class Solution: ...

2021-12-14 11:27:45 231

原创 剑指 Offer 65. 不用加减乘除做加法python

题目描述:题解:class Solution: def add(self, a: int, b: int) -> int: return add(a ^ b, (a & b) << 1) if b else a

2021-12-14 10:55:50 54

原创 剑指 Offer 15. 二进制中1的个数python

题目描述:题解:1.count记录n中1的个数。2.每次通过与1做按位与运算,判断n的最后一位是否为1,结果加入count,n左移一位class Solution: def hammingWeight(self, n: int) -> int: count = 0 while n>0: bit = n&1 count = count+bit n = .

2021-12-14 10:29:06 380

原创 剑指 Offer 33. 二叉搜索树的后序遍历序列python

题目描述:题解:1.二叉搜索树的性质是:左子树的值都小于根节点,右子树的值都大于根节点。后续遍历结果的最后一个数字为根结点的数值。2.定义函数helper,判断输入nums数组是否为二叉搜索树的后续遍历结果,根结点值rootval为nums[-1],从nums第一个数开始,找到第一个大于rootval的nums[i],如果nums是二叉搜索树的后序遍历,nums[i]之后对应root的右子树,节点值应该比rootval大,因此如果找到一个nums[j](j>i)的值小于rootval.

2021-12-14 10:11:55 369

原创 leetcode 剑指 Offer 16. 数值的整数次方 python

题目描述:题解:普通递归超时,使用快速幂mypow(x,n)=mypow(x,n//2)**2如果n为偶数mypow(x,n)=mypow(x,n//2)**2*x如果n为奇数mypow(x,n)=mypow(1/x,-n)如果n为负数class Solution: def myPow(self, x: float, n: int) -> float: if n==0: return 1 if n==1:

2021-12-13 16:12:29 96

原创 leetcode 剑指 Offer 68 - II. 二叉树的最近公共祖先python

题目描述:题解:与剑指 Offer 68 - I. 二叉搜索树的最近公共祖先python_ganggang的博客-CSDN博客差别在于不是二叉搜索树,但思路仍然是判断p q分别位于root左右哪个子树。1.如果root为空,返回None,如果输入root值与p或者q的节点值相等,则返回root。2.分别对root的左右子树调用lowestCommonAncestor。class Solution(object): def lowestCommonAncestor(self,

2021-12-12 18:33:36 457

原创 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先python

题目描述:题解:利用二叉搜索树的性质1.如果当前root比输入p q节点值都要大,说明p,q和其共同祖先都在root.left2.如果当前root比输入p q节点值都要小,说明p,q和其共同祖先都在root.right3.否则root则为p q的公共祖先class Solution(object): def lowestCommonAncestor(self, root, p, q): if root==None: return .

2021-12-12 11:39:47 362

原创 leetcode 剑指 Offer 64. 求1+2+…+n python

题目描述:题解:递归1.如果输入n=1,则返回n。2.否则对n-1递归调用sumNums,然后返回其结果加n。class Solution(object): def sumNums(self, n): if n==1: return 1 else: return self.sumNums(n-1)+n...

2021-12-12 10:59:01 144

原创 leetcode 91. 解码方法 python

题目描述:题解:动态规划1.如果s以0开始,无法解码,返回0.2.如果s中s[i-1:i+1]=='00'或者s[i-1]>'2' s[i]=='0'(因为s[i-1]>'2‘,所以s[i-1]必须与s[i-2]一起进行解码,但s[i]为0,无法作为一个合法解码的开头),返回0.3.如果s[i-1:i+1]在1-26之间并且s[i]不为'0',s[i-1:i+1]可以一起解码,也可以s[i-1]和s[i-2]解码,s[i]单独解码。4.如果s[i]=’0‘,s[i].

2021-12-11 20:23:10 281

原创 leetcode 413. 等差数列划分python

题目描述:题解:动态规划1.创建一个长度为len(nums)+1的数组dp,全部初始化为0,一个记录最终结果的result。2.i从2开始,如果nums[i]-nums[i-1]==nums[i-1]-nums[i-2],dp[i]=dp[i-1]+1,否则dp[i]=0,result=result+dp[i]class Solution: def numberOfArithmeticSlices(self, nums: List[int]) -> int: .

2021-12-11 17:38:29 245

原创 leetcode 748. 最短补全词 python

题目描述:题解:1.遍历输入字符串licensePlate,将其中的字母全部转为小写,并利用dict_s记录licensePlate每个字母对应的出现次数。2.对words中每个word做以下处理:初始化flag=0,统计dict_s中每个字母在word的出现次数,如果大于等于dict_s[对应字幕],flag++,如果最终flag==len(dict_s),则说明输入字符串licensePlate中所有的字母都在word中存在。同时如果遇到更短的满足以上要求的word则更新。c.

2021-12-10 15:21:23 290

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除