leecode刷题
tangliu333
努力奋斗的大学生一枚
展开
-
牛课-跳跃游戏1,2,3
代码】牛课-跳跃游戏1,2,3。原创 2022-07-23 23:32:03 · 593 阅读 · 0 评论 -
信封嵌套笔记
代码】信封嵌套笔记。原创 2022-07-22 09:55:03 · 112 阅读 · 0 评论 -
合唱队形笔记
这道题是要求形成一个合唱的队形,中间的人最高,两边人的身高成递减排列。我的思路就是遍历所有人,以每个人作为中间最高的人ti,分成左边和右边。左边要求递增,右边要求递减。然后分别求出左边的以ti为结尾的严格递增子序列的长度。求出右边以ti为开头的严格递减子序列的长度(把子数组翻转一下求以ti为结尾的严格递增子数组长度)。这就是满足队形要求的人数。最后总人数减去满足要求的人数就得到了要出去的人数。...原创 2022-07-20 20:12:10 · 105 阅读 · 0 评论 -
链表逆序输出
链表逆序输出两种方法,第一种利用递归加回溯,第二种利用辅助栈。 感觉很久不写算法题了,手感都很陌生了,但是这一道题还是很能体现出来递归和回溯的魅力1.递归`def reversePrint(head): return revrsePrint(head.next)+[head.val] if head else []`例如[1,2,3]这样一直递归到尾结点,再回溯,依次从尾到头再返回[]、[]+[3]、[3]+[2]、[3,2]+[1]。2.利用辅助栈class Sol原创 2020-09-30 11:27:21 · 352 阅读 · 0 评论 -
8.5
1.第一题原创 2020-08-05 13:03:29 · 100 阅读 · 0 评论 -
8.4
1.第一题回溯法:class Solution: def combine(self, n: int, k: int) -> List[List[int]]: def dfs(path,res,nums,k): if k==0: res.append(path[:]) return for i in range(len(nums)):原创 2020-08-04 11:08:56 · 143 阅读 · 0 评论 -
8.3
1.第一题:用二分法,一直缩小范围。class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]: n=len(nums) head=0 tail=n-1 while head<=tail: mid=head+(tail-head)//2 if nums[mid]<t原创 2020-08-03 22:31:15 · 130 阅读 · 0 评论 -
8.2
1.第一题:这一道题用双指针,second指针向first指针后移n-1位,当second指针移到表尾时,first指针表示需要删除的节点,使用指针a表示first指针的前一节点。要考虑当删除的是头节点时的特殊情况、还有只有一个节点和两个节点的情况。代码如下:class Solution: def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: first=head a=head原创 2020-08-02 11:31:23 · 94 阅读 · 0 评论 -
7.29
1.第一题:这是一道数学题。。。。结论:作为先手,如果堆中石头的数量 n 不能被 4 整除,那么你总是可以赢得 Nim 游戏的胜利。原因:1.小于3块的话,你作为先手就可以全拿走,结束游戏。2.如果刚好4块的话,作为先手一定会输,因为对手一定会拿走最后一块。所以在自己的回合中应避免自己剩下4个。3.但是如果不是4倍数的话,就可以控制将4个留给对手,那么自己必定会赢。比如7,那就先把后四个排除,剩下3个,自己都拿走,就将四个僵局留给对手。比如13,将3*4剪掉,第一次自己拿走1个,后几轮对手不管原创 2020-07-29 14:59:35 · 158 阅读 · 0 评论 -
7.28
1.第一题:对字母的ASCII码进行异或操作,最后再转换为字母。class Solution: def findTheDifference(self, s: str, t: str) -> str: res=0 for i in range(len(s)): res^=(ord(s[i])^ord(t[i])) res^=ord(t[-1]) return chr(res)2.第二题:超出时间限制原创 2020-07-28 18:53:46 · 75 阅读 · 0 评论 -
7.27
1.第一题:class Solution: def missingNumber(self, nums: List[int]) -> int: n=len(nums) demo=[i for i in range(n+1)] for num in nums: if num in demo: demo.remove(num) return demo[0]2.第二题:首先原创 2020-07-27 21:21:33 · 87 阅读 · 0 评论 -
7.26
1.第一题:直接双指针就行,很简单:class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ n=len(s) i=0 j=n-1 demo=0 while i<j:原创 2020-07-26 19:05:40 · 123 阅读 · 0 评论 -
7.25
1.第一题:本来是个很简单的题,这该死的判断条件,用的二分查找class Solution: def firstBadVersion(self, n): """ :type n: int :rtype: int """ if n==1: return 1 head=1 tail=n mid=(head+tail)//2 whil原创 2020-07-25 22:34:00 · 61 阅读 · 0 评论 -
7.24
1.第一题:代码如下:class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: res=[] for i in nums1: if i in nums2 and i not in res: res.append(i) return res2.第二题:代码如下:原创 2020-07-24 21:17:33 · 67 阅读 · 0 评论 -
7.23
1.第一题:使用dict来标记字符的对应情况再来判断,代码如下:class Solution: def isIsomorphic(self, s: str, t: str) -> bool: mapping=dict() used=set() for i ,char in enumerate(s): if char not in mapping and t[i] not in used:原创 2020-07-23 13:01:14 · 117 阅读 · 0 评论 -
7.21
1.第一题:一直除2看余数是否为0,代码如下:class Solution: def isPowerOfTwo(self, n: int) -> bool: while n: if n==1: return True if n%2!=0: return False n=n/2 return False2.第二题:代码原创 2020-07-21 14:04:29 · 93 阅读 · 0 评论 -
7.20
1.第一题:通过依次在表头添加的方式反转链表,代码如下:class Solution: def reverseList(self, head: ListNode) -> ListNode: new=None while head: p=head a=head.next p.next=new new=p head=a ret原创 2020-07-20 16:06:21 · 95 阅读 · 0 评论 -
7.19
1.第一题:直接法,不行看来我还是该看点算法书了,这样下去没前途!!!class Solution: def containsDuplicate(self, nums: List[int]) -> bool: if nums ==[]: return False nums=sorted(nums) key=nums[0] for i in range(1,len(nums)):原创 2020-07-19 13:57:12 · 82 阅读 · 0 评论 -
7.18
1.第一题:我还是那么暴力没有一点进步:class Solution: def isHappy(self, n: int) -> bool: m=0 result=[] def sumss(n): a=0 sums=0 while n: a=n%10 sums+=a*a n=原创 2020-07-18 21:51:20 · 85 阅读 · 0 评论 -
7.16日摸鱼
1.第一题:这一道题的暴力解法反正一开始我是没有思路的,最后也是看了一下官方题解用顺序找到相邻的最高和最低,求其差值相加,代码如下:class Solution: def maxProfit(self, prices: List[int]) -> int: i=0 valley=prices[0] peak=prices[0] maxprofit=0 while i<len(prices)-1:原创 2020-07-16 20:37:06 · 80 阅读 · 0 评论 -
7.14日学习
1.第一题:这一道题叫三色旗问题,我一开始想的是遍历数组,是0就插到表头,是2就插到表尾,1就pass,然后看了一下官方题解,维护0的右侧节点和2的左侧节点,若curr(表示当前正在遍历的值的下标)指向的值为0则交换nums[p0]和nums[curr],且p0+1,curr+1;若curr指向的值为2则交换nums[p2]和nums[curr],且p2-1,若nums[curr]=1则curr+1,一直到curr>p2.代码如下:class Solution: def sortColo原创 2020-07-15 09:43:57 · 86 阅读 · 0 评论 -
7.13学习
1.第一题,这道题绝对是一个脑筋急转弯hhh代码如下:class Solution: def maxCount(self, m: int, n: int, ops: List[List[int]]) -> int: M=[[0]*m]*n i_min=m j_min=n for demo in ops: i=demo[0] j=demo[1] if i&l原创 2020-07-13 11:42:39 · 125 阅读 · 0 评论 -
7.12闲来做题
1.第一题这一道题的思路就是利用双指针遍历,一开始我是从0到c//2,发现有一个100000的测试用例会超时,结果应该是sqrt©。代码如下:class Solution: def judgeSquareSum(self, c: int) -> bool: i=0 if c==1: return True j=int(math.sqrt(c)) demo=0 while i<=j原创 2020-07-12 22:52:00 · 100 阅读 · 0 评论 -
7.11日学习
1.第一题这一道简单题快把我搞裂开了,我的思路是从最末位开始求,最后逆序输出,可是我忘了判断特殊情况就是当n整除26时,以免26时会多输出一个A,所以要(n-26)//26.代码如下:class Solution: def convertToTitle(self, n: int) -> str: demo1=['Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','原创 2020-07-11 21:20:31 · 115 阅读 · 0 评论 -
leetcode7.9
1.第一题利用递归:class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: res=[] if root==None: return [] def fn(node): if node.left is not None: fn(node.left) re原创 2020-07-09 14:15:12 · 97 阅读 · 0 评论 -
leetcode刷题7.8
1.第一题:这道题一开始用回溯,时间超时,优化了一下还是时间超时,最后看了官方题解发现是个数学题,害,只需要一次遍历,k个板子总共有k+1种组合方案,最后推导出来的式子是shorter*(k-i)+longer*i,长知识了长知识了,代码如下:class Solution: def divingBoard(self, shorter: int, longer: int, k: int) -> List[int]: demo=[] if k==0:原创 2020-07-08 18:47:23 · 92 阅读 · 0 评论 -
7.7摸鱼
1.第一题:这道题看的官方思路,挺巧妙的。还是按照9*9将二维数组两次循环遍历完,在遍历的同时分别对行和列、宫做记录,判断行和列、宫是否出现了重复值,使用hashmap来保存,其中这个宫的划分使用box_index=(i//3)*3+j//3来划分为9个宫,这个比较巧妙。代码如下:class Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: rows=[{} for i in ran原创 2020-07-07 16:46:22 · 385 阅读 · 0 评论 -
7.2日leetcode
7.2leetcode1.第一题:这道题虽然是一道简单题,但是我还是写不出来不用排序的解法,而且分的情况也挺多种的,大早上的真是把我给绕糊涂了,鬼知道这一道题我怎么就罗嗦了30几行代码,欲哭无泪,代码如下:class Solution: def largestSumAfterKNegations(self, A: List[int], K: int) -> int: b=sorted(A) num=0 for value i原创 2020-07-02 17:08:58 · 1247 阅读 · 0 评论 -
6.28日摸鱼
leetcode刷题1.第一题,杨辉三角,题目如下:这道题的思路很简单,处理好一行和0行的特殊情况后,就是动态生成,用一个demo来表示当前生成的列表,列表首尾为1,此外demo[j]等于上一行的j-1个元素加上第j个元素之和,这样暴力求解出来,害我还是太垃圾了,代码如下:class Solution: def generate(self, numRows: int) -> List[List[int]]: result=[] if numRo原创 2020-06-28 21:52:03 · 3247 阅读 · 0 评论 -
leecode刷题第18天!
leetcode刷题第十八天第一题:这道题怎么说呢,出题者有点意思,直接借助辅助空间来解决,判断节点地址是否已经存在在了辅助空间中,若已经存在则说明出现了环,代码如下:class Solution: def hasCycle(self, head:ListNode) -> bool: key=[] while head: if head not in key: key.app原创 2020-06-13 12:52:03 · 120 阅读 · 0 评论 -
leetcode第十七天
1.第一题:这道题我的方法挺笨的,先是用一个列表将所有的字母和数字转换为大写存储起来,再利用两个指针,分别指向列表开头和结尾,依次判断是否相等,若不想等则直接返回False,若到最后则返回True,代码如下:class Solution: def isPalindrome(self, s: str) -> bool: if s==" ": return True string=[] for i i原创 2020-06-04 10:28:26 · 131 阅读 · 0 评论 -
leetcode第十六天
1.第一题:这道题的思路还是利用队列进行自上而下的层次遍历,最后将结果逆转就可以了,思路挺简单的:class Solution: def levelOrderBottom(self, root: TreeNode) -> List[List[int]]: if root==None: return [] queue=collections.deque() res=[] queu原创 2020-06-03 21:37:25 · 114 阅读 · 0 评论 -
leetcode刷题第十五天
leetcode刷题15天1.第一题:菜鸡只会用递归来写,首先判断根节点的左右子树是不是对称的,若不是对称的则返回False,否则判断左子树的左孩子和右子树的右孩子是否对称,左子树的右孩子和右子树的左孩子是否对称,这样依次递归,代码如下:class Solution: def isSymmetric(self, root: TreeNode) -> bool: def check(node1,node2): if node1==Non原创 2020-06-03 20:09:54 · 137 阅读 · 0 评论 -
leetcode第14天
leetcode刷题第14天1.第一题:今天很烦躁,只是一个代码的搬运工:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """ p1=m-1 p2=n-1 while原创 2020-06-01 13:07:02 · 154 阅读 · 1 评论 -
leetcode刷题第13天
leetcode刷题第13天1.第一题:这一道题使用暴力解法,我觉得的暴力哈,当ii<=x and (i+1)(i+1)>x时,返回i就是答案,我是直接遍历,但我看了题解其实可以用二分查找,效率更高,但是我懒得写了hhh,我的代码如下:class Solution: def mySqrt(self, x: int) -> int: if x==0 or x==1: return x n=x//2原创 2020-05-31 13:08:00 · 250 阅读 · 0 评论 -
leetcode刷题第十二天
leetcode刷题12天1.这道题其实挺简单的,但是要注意最后面是空格的情况,我的方法是使用一个key来标注从后往前第一个不是空格的位置,这样从key一直到0判断单词的长度,代码如下:class Solution: def lengthOfLastWord(self, s: str) -> int: if s==" ": return 0 elif len(s)==1 or len(s)==0: return len(s)原创 2020-05-30 10:57:17 · 147 阅读 · 0 评论 -
刷题第11天
这里写自定义目录标题1.这道题很简单,直接贴代码:class Solution: def searchInsert(self, nums: List[int], target: int) -> int: length=len(nums) for i in range(length): if nums[i]==target: return i eli原创 2020-05-29 10:26:52 · 188 阅读 · 0 评论 -
leetcode刷题第10天
leetcode刷题第十天1.算了我从简单的做起吧,今天的第一题:这道题要求在原数组上改,因为是排过序的数组,所以这道题还是比较简单的,先定义一个变量key来记录当前比较的不同的字符,若nums[i]与key相等,则将nums[i]删除,若不相等,令key=nums[i],这样一直直到nums遍历完,代码如下:class Solution: def removeDuplicates(self, nums: List[int]) -> int: if len(num原创 2020-05-28 19:23:22 · 357 阅读 · 0 评论 -
leetcode刷题第9天
leetcode刷题第9天1.第一题,爬楼梯问题这道题是一个简单的动态规划问题,memo[i]=memo[i-1]+memo[i-2]代码如下:class Solution: def climbStairs(self, n: int) -> int: memo=[0]*(n+1) if n==1: return 1 if n==2: return 2原创 2020-05-27 10:15:00 · 122 阅读 · 0 评论 -
leetcode刷题第8天
leetcode刷题第八天1.今天的第一题:这道题使用动态规划,一个网格的路径条数等于到达它左边网格的路径条数加上到达它上面一个网格的路径条数:代码入下:class Solution: def uniquePaths(self, m: int, n: int) -> int: memo=[[0 for _ in range(n)] for _ in range(m)] memo[0][0]=0 for row in r原创 2020-05-26 13:08:41 · 197 阅读 · 0 评论