![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
offerNotFound
梦想很伟大,过好每一天!
展开
-
LeetCode 125.验证回文串
解题思路 使用双指针,左指针向友移,右指针向左移,判断移动到的字符是否是字母或数字,是就判断是否相同,不是字母或数字则继续移动;终止条件为两指针相遇; 时间复杂度:O(|s|)O(∣s∣),其中 |s|∣s∣ 是字符串 ss的长度。 空间复杂度:O(|s|)O(∣s∣)。由于我们需要将所有的字母和数字字符存放在另一个字符串中,在最坏情况下,新的字符串与原字符串完全相同,因此需要使用 O(|s|)O(∣s∣) 的空间。 代码: class Solution(object): def isPalindr原创 2021-01-27 16:37:19 · 56 阅读 · 0 评论 -
LeetCode 121、122买卖股票跌得最佳时机
解题思路 121、 方法一:只能进行一次买卖,则用贪心算法来计算,遍历一遍数组,最大利润就是最大值减去最小值,遍历时不断更新最小值即可 代码: class Solution(object): def maxProfit(self, prices): if not prices: return 0 n = len(prices) min_val = float("inf") res = 0 for原创 2021-01-26 17:57:38 · 70 阅读 · 0 评论 -
LeetCode 15.三数之和
解题思路 在两数之和的基础上去解,用排序加双指针即可,先固定第一个值,再用双指针去找另外两个值,如果和大于 0,那就说明 right 的值太大,需要左移。如果和小于 0,那就说明 left 的值太小,需要右移 代码: class Solution(object): def threeSum(self, nums): n=len(nums) res=[] if(not nums or n<3): return []原创 2021-01-24 16:57:33 · 60 阅读 · 1 评论 -
LeetCode 83.删除排序链表中的重复元素
解题思路 用node来当做当前节点,node.next当做下一节点,用while循环来遍历链表; 遍历玩链表挤结束,还需要判断下头结点head与node是否为空,如果遍历过程中当前节点与下一节点相同则删除一个,即 node.next=node.next.next,如不相同则继续遍历 代码: class Solution(object): def deleteDuplicates(self, head): node=head while node and node.next:原创 2021-01-23 16:49:54 · 65 阅读 · 0 评论 -
LeetCode 69.x的平方根
解题思路 方法一:调用库来解决 代码: import math class Solution(object): def mySqrt(self, x): return int(math.sqrt(x)) 方法二:暴力解法,先假设根为1(自加),再一直判断根的平方是否满足<=x,不满足时返回根-1 代码: class Solution(object): def mySqrt(self, x): sqrt=1 while sqrt**2<=x:原创 2021-01-23 15:35:36 · 68 阅读 · 0 评论 -
LeetCode 58.最后一个单词的长度
解题思路 split()函数删除空格再将数组倒序,遍历一遍返回开头不是空格的第一个单词的长度 代码: class Solution(object): def lengthOfLastWord(self, s): r = s.split(" ") r.reverse() for i in r: if i: return len(i) return 0 ...原创 2021-01-22 16:20:20 · 59 阅读 · 0 评论 -
LeetCode 53.最大子序和
解题思路 对于当前数字,若前面的几个数字的和为正,则加上前面的数字组的和作为新的最大子数组,若前面的数字组的和为负则保留自身作为新的最大子数组得开头;每次遍历后都与当前最大子数组和做比较,保留较大者。 代码: class Solution: def maxSubArray(self, nums: List[int]) -> int: maxSum = tempSum= nums[0] for num in nums[1:]: tempSu原创 2021-01-21 16:42:51 · 53 阅读 · 0 评论 -
LeetCode 35.搜索插入位置
解题思路 target在nums中,直接遍历查找给下标,不在的话加入nums中排序再给下标 代码: class Solution(object): def searchInsert(self, nums, target): for i in range(len(nums)): if nums[i]==target: return i else: nums.append(ta原创 2021-01-21 16:17:09 · 52 阅读 · 0 评论 -
LeetCode 27.移除元素
解题思路 将不等于val的元素转进新的链表中,使用双指针,i相当于新链表,j相当于原链表 代码: class Solution(object): def removeElement(self, nums, val): i = 0 for j in range(0,len(nums)): if nums[j]!=val: nums[i]=nums[j] i+=1 re原创 2021-01-20 16:15:32 · 110 阅读 · 1 评论 -
LeetCode二十题 有效的括号
解题思路 使用栈的方法,栈先入后出特点恰好与本题括号排序特点一致,即若遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,则遍历完所有括号后 stack 仍然为空 代码: class Solution(object): def isValid(self, s): if not s: return True size = len(s) # s的长度为奇数或者以某个右括号开头,返回False if size % 2 o原创 2021-01-20 15:10:12 · 75 阅读 · 0 评论 -
LeetCode十四题 最长公共前缀
解题思路 将字符串进行sort()排序,然后再比较字符串内第一个单词与最后一个单词的共同项(sort排序是根据26个字母顺序先后排序,所以不用看中的单词) 代码: class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: k="" if not strs: return k strs.sort() n=len(strs)原创 2021-01-18 16:27:30 · 68 阅读 · 0 评论 -
LeetCode十三 罗马数字转整数
解题思路 对罗马字符建立相应的整数字典,对罗马字符串从左向右遍历,若当一个字符大于其右边的字符时,则加上该值,否则减去该值。 代码: class Solution(object): def romanToInt(self, s): x=0 dic={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000} for i in range(len(s)): if i<len(s)-原创 2021-01-17 16:54:32 · 59 阅读 · 0 评论 -
LeetCode第九题 回文数
解题思路 解法一:(最容易理解,当然没效率可言…) 整数取余得倒序后的数,再相比 代码: class Solution(object): def isPalindrome(self, x): y =x a = 0 while y>0: a=a*10 + y%10 y = y//10 return a==x 解法二: 转化成字符串或列表,一行搞定 代码: class Solution原创 2021-01-17 16:30:19 · 56 阅读 · 0 评论 -
leetcode第七题 整数反转
解题思路 例子:1234 -> 4321,不难发现个位数变千位数,十位数变百位数,百位数变十位数,千位数变个位数。 所以我们得到字符串的最后一位,进行倍数变化操作就行。 代码: class Solution(object): def reverse(self, x): a = 0 while x!=0: if x>0: a=a*10+x%10 x = x//10 else: a=a*10+x%-10 x = -(x//-10) retur原创 2021-01-16 16:07:11 · 76 阅读 · 0 评论 -
leetCode第三题 无重复字符的最长子串
学习他人答法 解题思路 举个例子,字符串S=“abc”,其无重复最长子串是’abc’,那么再在字符串‘abc’后加个字符’d’,变成字符串S1’‘abcd’,其无重复最长子串是什么? S结尾加上’d’之后,最长无重复子串有两种可能: 最长无重复子串包含新增的’d’,即’cd’ 最长无重复子串不包含新增的’d’,即S1的最长无重复子串’abc’ 比较’cd’与’abc’,len(‘abc’)>len(‘cd’),所以S1的最长无重复子串依然是’abc’ 所以已知一个字符串Si,其长度为L,在Si末尾加入原创 2021-01-16 15:37:57 · 91 阅读 · 0 评论 -
leetcode练习题2 两数相加
LeetCode经典前100 大三了,也快准备实习了,就开始从基础慢慢捡起来嚼烂吧(做LeetCode的经典前100是真的太虐人,我也太菜了…) 记录下自己的做题过程 题目描述:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 自己思考加看其他答主给出的题解,我的理解为: 有两种特殊情况: 1、两链表长度不相等,如899+155原创 2021-01-15 15:49:14 · 114 阅读 · 0 评论