精刷LeetCode
Mochadrone
半路出家的程序猿,充当分母的炼丹师。在内卷的浪花中痛并快乐着的水手。UIUC MCS预备生,目前在寻找各厂CV相关算法实习生的工作,欢迎沟通!
展开
-
剑指offer - dfs 专题
剑指 Offer 12. 矩阵中的路径思路:只要想到用dfs去解决,其实不是很难。用下上右左的顺序去递归:超出边界字符不匹配用一个巧妙的方法去避免flag的使用代码class Solution: def exist(self, board: List[List[str]], word: str) -> bool: def dfs(i, j, k): if i<0 or j<0 or i>len(board)-1原创 2020-09-26 02:29:49 · 196 阅读 · 0 评论 -
LeetCode - 动态规划专题
剑指 Offer 14- I. 剪绳子思路考虑多种解法Memoization. 记忆化。也叫从顶到底的算法。将一个列表初始化成0(或者-1在某些题中),如果不是初始化的值就直接读取,如果是的话就迭代的找符合要求的值存入。很好理解。时间复杂度O(2N)O(2^N)O(2N),空间复杂度O(N)O(N)O(N)DP,从底向顶。根据初始值,和剪下来j后不剪,和剪下来j后继续剪三种情况取最大来从底到顶地写入。时间复杂度O(N2)O(N^2)O(N2), 空间复杂度O(N)O(N)O(N)DP优化解法。用原创 2020-09-26 02:25:48 · 207 阅读 · 0 评论 -
剑指offer-树专题
重建二叉树思路用递归的方式解决:Root是preorder的首项,在inorder里面找到root对应的位置,即可以确定左右子树。左子树的root是pre_root的下一项;依然根据root的位置确定root在左子树inorder的顺序,之后一直递归下去。右子树的root是preorder中右子树的第一项:pre_root+1+i-in_left。根据这个递归下去。代码class Solution: def buildTree(self, preorder: List[int],原创 2020-09-26 02:25:12 · 193 阅读 · 0 评论 -
剑指offer-二分法专题
剑指 Offer 11. 旋转数组的最小数字思路算法流程:初始化: 声明 ii, jj 双指针分别指向 numsnums 数组左右两端;循环二分: 设 m = (i + j) / 2m=(i+j)/2 为每次二分的中点( “/” 代表向下取整除法,因此恒有 i \leq m < ji≤m<j ),可分为以下三种情况:当 nums[m] > nums[j]nums[m]>nums[j] 时: mm 一定在 左排序数组 中,即旋转点 xx 一定在 [m + 1, j]原创 2020-09-26 02:23:41 · 125 阅读 · 0 评论 -
剑指offer-双指针专题
剑指 Offer 22. 链表中倒数第k个节点思路很经典的双指针题目让指针pt_1 先走k步,pt_2出发。这样当pt_1达到末尾时,pt_2刚好走到倒数第k个。代码:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def getKthFr原创 2020-09-26 02:21:11 · 144 阅读 · 0 评论 -
剑指offer-数组专题
剑指 Offer 03. 数组中重复的数字题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3思路hashtable。初始化dict为-1,遍历nums,碰到-1放入;反之return代码# hashtableclass Solution:原创 2020-09-10 02:07:55 · 158 阅读 · 0 评论 -
剑指offer-斐波那契专题
题目斐波那契数列思路最简单就是递归了,但是千万不要用递归。因为时间和空间复杂度都非常高:都是O(2n)O(2^n)O(2n)第二种是存下来一个数组,如果call到了有值的数组,那么直接返回该值而不是递归地算下去。第三种是动态规划,这里只需要保存最近的两个值,所以以a,b保存n-1,n-2的值,每次递归加起来就可以。代码# 极致简化版。真的牛皮我只能说class Solution: def fib(self, n: int) -> int: a, b = 0,原创 2020-09-10 02:07:13 · 94 阅读 · 0 评论 -
剑指offer-栈专题
剑指 Offer 09. 用两个栈实现队列题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例2:输入:[“CQueue”原创 2020-09-10 02:06:34 · 105 阅读 · 0 评论 -
100天精刷LeetCode-Day7:Palindrome Linked List问题(附详细思路和python题解)
234 Palindrome Linked List题目Given a singly linked list, determine if it is a palindrome.Example 1:Input: 1->2Output: falseExample 2:Input: 1->2->2->1Output: trueFollow up:Could you do it in O(n) time and O(1) space?思路已经做了很多天快慢指原创 2020-09-10 02:05:52 · 113 阅读 · 0 评论 -
100天精刷LeetCode-Day6:Linked List Cycle2问题(附详细思路和python题解)
142 Linked List Cycle题目描述思路依然用快慢指针的思路,然而这次需要考虑的是环的入口,这时候有一个更巧妙的方法:当快慢指针相遇时,一个从head出发的慢指针_2以与慢指针相同的速度出发。当两个指针相遇的时候,所在node就是cycle的入口。慢指针:A——>B----->C(共走了N步)快指针:A——>B----->C(共走了2N步)快指针fast比慢指slow针多走了N步,因此,慢指针slow如果继续再走N步,会从C----->C,依然回原创 2020-09-02 18:32:20 · 158 阅读 · 0 评论 -
100天精刷LeetCode-Day5:141 Linked List Cycle问题(附详细思路和python题解)
题目描述Given a linked list, determine if it has a cycle in it.To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. If pos is -1, then there is no cycle原创 2020-09-02 18:30:18 · 136 阅读 · 0 评论 -
100天精刷LeetCode-Day4:Reverse Linked List问题(附详细思路和python题解)
206 reverse linked list题目Reverse a singly linked list.Example:Input: 1->2->3->4->5->NULLOutput: 5->4->3->2->1->NULL代码class Solution: def reverseList(self, head: ListNode) -> ListNode: if not head or not原创 2020-08-28 16:14:08 · 266 阅读 · 0 评论 -
100天精刷LeetCode-Day3:Swap Nodes in Pairs问题(附详细思路和python题解)
题目:24. Swap Nodes in PairsGiven a linked list, swap every two adjacent nodes and return its head.You may not modify the values in the list’s nodes, only nodes itself may be changed.思路链表题依然要注意使用dummy,用dummy.next指向原始的开始。用head来进行交换,在head.next和head.原创 2020-08-26 00:15:39 · 156 阅读 · 0 评论 -
100天精刷LeetCode-Day2:经典Add two number问题(附详细思路和python题解)
题目You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.You may assume the two numbers do原创 2020-08-24 01:18:23 · 296 阅读 · 0 评论 -
100天精刷LeetCode-Day1:经典Two Sum问题(附详细思路和python题解)
Day1 - Aug.22Two Sum 问题:Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same element twice.ExampleGiven n原创 2020-08-22 22:31:28 · 313 阅读 · 0 评论