菜鸡的leetcode心得
nice_evil
这个作者很懒,什么都没留下…
展开
-
【数据结构-leetcode系列】6.重塑矩阵(No.566)
本题中要想加快运行速度的最主要方法就是减少循环次数,避免两个for循环嵌套检索。原创 2022-10-17 22:43:19 · 202 阅读 · 0 评论 -
【算法合集-leetcode系列】5.移动零(No.283)
其实最直观的想法,不要跟着题目走,而是挑选出非0部分,按顺序排好数组。然后统计非0部分,补在后面。官方解题提供了一种【交换】的思路,双指针,加快运行效率。我们不需要管0,只需要管非0。上述两种速度都很快。第二种方法空间占用更低一些。...原创 2022-07-28 18:31:49 · 1289 阅读 · 0 评论 -
【算法合集-leetcode系列】3. 搜索插入位置(No.35)
题目描述: 35. 搜索插入位置https://leetcode.cn/problems/search-insert-position/用普通循环方法找肯定是可以的,但题目要求复杂度O(log n),就意味着要使用二分法啦。整体思路类似于二分查找目标target,但本问题多了“插入”的情况,需注意边界条件问题。我的思路:(1)先判断左右两端临界问题。若超出数组范围,那么直接比较最大最小值,返回位置(2)当target存在于list中,直接返回(3)当target不存在鱼list中并位于中间两数之间时,解为(原创 2022-07-14 17:15:43 · 1543 阅读 · 0 评论 -
【算法合集-leetcode系列】2.第一个错误的版本(No.278)
278. 第一个错误的版本https://leetcode.cn/problems/first-bad-version/最不需要思考的思路,一个个检索,直到第i个=True,第i-1个=False,写循环检索。但显示超时。那么有规则的数组,使用二分法: 效率没有特别高,因为在二分的时候,计算了一些重复元素继续改进,减少重复检索:减少了一些重复点,效率很高了官方版本:...原创 2022-07-12 18:09:53 · 71 阅读 · 0 评论 -
【算法合集-leetcode系列】1.二分查找(No.704)
题目描述如下:704. 二分查找https://leetcode.cn/problems/binary-search/算法思路:最简单的二分法,移动指针。*记得防止死循环的方法是指针移动mid+-1原创 2022-07-08 19:00:24 · 153 阅读 · 0 评论 -
【数据结构-leetcode系列】5.两个数组的交集(No.350)
题目链接如下:350. 两个数组的交集 IIhttps://leetcode.cn/problems/intersection-of-two-arrays-ii/方法总结:(1)字典快速查询(2)sort()+双指针第一反应,统计个数用Counter()(python自带强大的collections库)最便捷的字典,不过这种方法还是慢了: 两个循环还是影响效率了,所以优化一下:【】一种更有趣的方法,排序+双指针,效率极高:...原创 2022-07-01 00:11:10 · 155 阅读 · 0 评论 -
【数据结构-leetcode系列】4.合并两个有序数组(No.88)
题目链接如下: 88. 合并两个有序数组https://leetcode.cn/problems/merge-sorted-array/读题,最简单的思路是合并数组后排序,这种方法速度和效率也比较高。参见解法1: 写了个快排,不过明显比内置sort函数慢。。空间占用大很多,可以忽略。【这里个人复习一下class类中函数相互调用的方法,一定要记得函数定义时候加上“self”,并且在相互调用的时候也使用self.defxx,否则会报错“nameXX not defined”】利用了两个数组都“分别为原创 2022-06-29 03:03:50 · 231 阅读 · 0 评论 -
【数据结构-leetcode系列】3.两数之和(No.1)
原题目链接如下:1. 两数之和https://leetcode.cn/problems/two-sum/这里使用字典解法最为快速简单,但需要注意一个细节:即字典冲撞问题,当遇到相同的key值时,value值以最后的更新为准。举例说明如下:使用dict强制将元组转化为dict,如果碰到key重复问题:如果元组转为dict后key重复,则后面的key-value会覆盖前面的key-value(简单地说,python3.6后字典变为【有序】,value以最后出现的元素为准)。换到这道题目上,使用哈希表求解:原创 2022-06-28 18:56:42 · 203 阅读 · 0 评论 -
【数据结构-leetcode系列】2.最大子数组和(No.53)
题目链接如下:53. 最大子数组和https://leetcode.cn/problems/maximum-subarray/优化后的效率非常高: 系统的多种算法求解:4种经典算法可以实现:(1)暴力循环(2)动态规划,求解第n个状态的通解状态方程dp[i]=max(dp[i-1]+nums[i],nums[i])(3)贪心算法,局部最优(4)分治...原创 2022-06-22 02:10:45 · 977 阅读 · 0 评论 -
【leetcode系列-数据结构专题-字符串】字符串中的第一个唯一字符/ 有效的字母异位词/赎金信
题目看起来很简单,怎么做都能做出来,但重点在于【数据结构】,要学会灵活应用不同的数据类型和结构进行快速结题。这里总结几个官方的解法如下:题目如下:力扣https://leetcode-cn.com/problems/first-unique-character-in-a-string/...原创 2022-02-24 18:21:20 · 814 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第19题:动态规划入门(6)最优观光组合/买卖股票的最优时机/买卖股票的最优时机II/最优买卖股票时机含冷冻期/买卖股票的最优时机含手续费
类似提醒大同小异:三道题如下,其实仔细观察,不难发现,第一题和第二题思路几乎一模一样,就是换了个说法,换汤不换药主要思路为:【指针i固定,其对应的values[i]也是固定的,也就是说,只需要确定某个数值的指针位置,其对应的数值确定。观光问题比股票问题稍微复杂一点点,i<j:max(values[i]+values[j]+i-j),可以写为i<j:max(values[i]+i)+max(values[j]-j),看成确定的两数之和,分别更新确定两数最大值即可。需要注意的原创 2022-02-17 18:47:49 · 237 阅读 · 0 评论 -
【入门必刷-leetcode题库】剑指offer(第2版)10- II. 青蛙跳台阶问题
class Solution: def numWays(self, n: int) -> int: #本题与动态规划-爬楼梯共有几种爬法相同 if n<=1: return 1 #F=[0]*(n+2) #F[1]=1 a,b,c=0,0,1 #for i in range(2,n+2): # F[i]=F[i-1]+F[i-2] .原创 2022-02-10 11:16:52 · 5891 阅读 · 0 评论 -
【入门必刷-leetcode题库】剑指offer(第2版)03. 数组中重复的数字
毫无疑问,用dict去检索速度肯定最快。这里提供一些其他的思路1.有重复字符的时候,排序,那么连续两个指针存在相同值,那么认为有重复(至少2个以上)字符并输出class Solution: def findRepeatNumber(self, nums: List[int]) -> int: nums.sort() for i in range(1,len(nums)): if nums[i]==nums[i-1]:原创 2022-01-31 12:34:22 · 6071 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第18题:动态规划入门(5)最大子数组和/环形子数组的最大和/乘积最大子数组/乘积为正数的最长子数组长度
1.最大子数组和:跟打家劫舍问题类似,某位置处的值跟前一个有关,但本题有一个问题是,需满足“连续”的条件。也就是说,class Solution: def maxSubArray(self, nums: List[int]) -> int: #指针每次移动1,F(n)为max(sum+F(n-1),F(n)) n=len(nums) #if n==0: # return 0 if n==1: .原创 2022-01-27 21:55:13 · 630 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第17题:动态规划入门(4)跳跃游戏/跳跃游戏2
又是一种类型的动态规划了,还是要尽量找到通解状态,然后再去写递归方程,最后通过边界值来进行递推【跳跃游戏的精髓是】:在任意一个位置(指针)k处,若想到达该位置k,那么k之前所有指针可以到达的最大位置的集合的max>=k,即,可以跳到任意位置的通解的数学表达式为:Max(i+nums[i])>=k,其中i+nums[i]为某位置可以跳到的最大位置class Solution: def canJump(self, nums: List[int]) -> bool:原创 2022-01-21 15:12:52 · 2071 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第10题:第一个错误的版本
依旧二分法查找的演化。思路是类似于神经网络的激活函数。当位于该点之前,全部为False(0),位于该点之后,全部为True(1),改点时,有且仅有该点,左边相邻为False,右边相邻为True原创 2022-01-12 14:58:00 · 1369 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第9题:搜索插入位置
#解法1:类似于第一个错误点判断,为sorted数列,#当target位于mid左边时,mid有可能为插入位置,因此设置mid最大=high;#当target位于mid右边时,mid不可能为插入位置,因此mid+1#该解法需要考虑边界问题,防止超出索引,因此len()长度要考虑好class Solution: def searchInsert(self, nums, target) -> int: low,high=0,len(nums) while .原创 2022-01-11 19:18:28 · 390 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第8题:动态规划入门(1)斐波那契数列/第 N 个泰波那契数
斐波那契原创 2022-01-11 16:21:29 · 204 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第7题:二分查找
'''#弱智解法一:class Solution: def search(self, nums, target): for i,num in enumerate(nums): if num == target: return i return -1'''#减少O(n)时间复杂度方法,二分法查找,因为输入数组为升序排列#由于要求的为target部分的指针,因此需要保持数组不变,否则指针会发生变化;只移动.原创 2022-01-06 22:38:04 · 683 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第6题:只出现一次的数字
'''#第一种简单解法,但至少需要o(n)复杂度,n为数组长度class Solution: def singleNumber(self, nums): for num in nums: if nums.count(num)==1: return num'''#第二种解法#数据结构解法【牛皮】#只存在时间复杂度,不存在额外空间占用问题,这里使用异或(bits)运算,符号^,相同时为0,不同时为1#异或有三个特征:#1.原创 2022-01-06 17:15:30 · 758 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第5题:有效括号
一个很妙的解法:class Solution: def isValid(self, s: str) -> bool: while '{}' in s or '[]' in s or '()' in s: s = s.replace('{}','') s = s.replace('[]','') s = s.replace('()', '') return s == ''if __na.原创 2022-01-06 16:05:18 · 818 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第4题:最长公共前缀
两种思路,这里就不考虑暴力的横向纵向解法了,显得太繁琐。下面推两个简单易懂,又十分巧妙的解法思路,共勉'''#方法1:根据python内置函数ord()进行字符串大小的比较(在比较时自动转化为Ascall码)class Solution: def longestCommonPrefix(self, strs): if not strs: return "" s1 = min(strs) s2 = max(strs) for i原创 2021-12-27 18:19:57 · 1347 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第3题:罗马数字转整数
class Solution: R_list={ 'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000 }#建立一个list列表 def romanToInt(self, s: str) -> int: ans=0 for i,num in enumerate(s): .原创 2021-12-24 16:00:57 · 970 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第2题:回文数
#法1:以数值形式,数学运算方法(个十百千万..)全部倒序判断是否两数相同#time:12msclass Solution(object): def isPalindrome(self, x): """ :type x: int :rtype: bool """ if x <= 0:return false origin=x r = 0 # 初始值 whil..原创 2021-12-20 17:16:30 · 171 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第1题:两数之和
from typing import Listimport timeclass Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: hashtable = dict() for i, num in enumerate(nums): #print(i,num) if target - num in hashtable: .原创 2021-12-16 22:56:27 · 327 阅读 · 0 评论