
leetcode
zyuPp
你今日练习了吗?
展开
-
【leetcode 3、424、209】【滑动窗口专题】
1原创 2020-12-08 11:56:04 · 219 阅读 · 0 评论 -
【leetcode 704、35、162、74】【二分查找法专题】
leetcode 704 【二分查找】题目链接解题思路与代码思路:代码:复杂度分析:\color{red}{复杂度分析:}复杂度分析:时间复杂度:空间复杂度:leetcode 35 【搜索插入位置】题目链接解题思路与代码思路:代码:复杂度分析:\color{red}{复杂度分析:}复杂度分析:时间复杂度:空间复杂度:leetcode 162 【寻找峰值】题目链接https://leetcode-cn.com原创 2020-11-30 14:29:25 · 215 阅读 · 0 评论 -
【leetcode 287 】【寻找重复数】【双指针专题】
leetcode题目链接https://leetcode-cn.com/problems/find-the-duplicate-number/解题思路与代码思路:这道题的限制条件很多,很麻烦。采用了时间换空间,实际这样做的情况比较少双指针法要做两个动作,第一:找到环;第二:找到环的入口(即重复元素)定义快慢指针,slow走一步,fast走两步,相等就跳出循环,快慢指针相遇说明重复元素一定在环内定义新指针find,find和slow每次都走一步,它们相遇,就是那个环的入口。为什么相遇就是原创 2020-11-23 13:57:44 · 278 阅读 · 0 评论 -
【leetcode 125】【验证回文串】【双指针专题】
leetcode 125【验证回文串】题目链接https://leetcode-cn.com/problems/valid-palindrome/解题思路与代码思路:逆序判断对字符串 ss 进行一次遍历,并将其中的字母和数字字符进行保留,放在另一个字符串 \textit{sgood}sgood 中。这样我们只需要判断 \textit{sgood}sgood 是否是一个普通的回文串即可。双指针(原地该字符串)我们直接在原字符串 ss 上使用双指针。在移动任意一个指针时,需要不断地向另一指针的方原创 2020-11-20 17:11:16 · 282 阅读 · 0 评论 -
【leetcode 27】【移除元素】【双指针专题】
leetcode 27【移除元素】题目链接https://leetcode-cn.com/problems/remove-element/解题思路与代码思路:双指针使用的是快慢指针思想,初始化两个指针,i指针是为了建立答案的指针,j指针是移动搜索val值的指针,j找到val就跳过它,找不到就令nums[i]=nums[j],这样前面的数字都是不等于val的,并i挪后,最后i所处的位置,就是答案的长度删除元素较少的双指针第一个解法会不断做复制操作,当数组中的val元素存在的比较少,就有太多不必原创 2020-11-19 10:56:54 · 195 阅读 · 0 评论 -
【leetcode 344】【反转字符串】【双指针专题】
leetcode 344【反转字符串】题目链接https://leetcode-cn.com/problems/reverse-string/解题思路与代码思路:双指针法初始化:设置两个指针l和r分别指向列表首尾元素步骤:交换s[i]和s[j]对应元素,并更新指针位置,直到两个指针相遇数组切片法s[::-1]表示反转s中的元素s[:]表示数组中所有子模块s[:]=s[::-1]表示将原数组反转后赋值给s中每一个对应的位置代码:双指针法class Solution: d原创 2020-11-18 10:04:05 · 146 阅读 · 0 评论 -
【leetcode 144、94、145、102】【二叉树前、中、后序以及层次遍历】
leetcode 144【二叉树前序遍历】题目链接https://leetcode-cn.com/problems/binary-tree-preorder-traversal/解题思路与代码思路:递归法前序遍历就是“根节点–左子树–右子树”的顺序去遍历整棵树,递归可以完美匹配这个过程。迭代法把递归所隐含的栈结构构建出来,模拟递归过程。只要左子树为空就pop出来,然后看右边。代码:递归法class Solution: def preorderTraversal(self, r原创 2020-11-14 16:52:00 · 136 阅读 · 0 评论 -
【leetcode 700】【二叉搜索树的搜索】
leetcode 700【二叉搜索树的搜索】题目链接https://leetcode-cn.com/problems/search-in-a-binary-search-tree/submissions/解题思路与代码思路:递归法如果root为空或者root和val的值相等,直接返回root,这里注意要把判断为空放在条件前面,避免为空时取不了root.val值。根据二叉搜索树的性质去搜左右树即可迭代法使用while循环,跳出循环的条件就是root为空或者与val值相等,如果不满足,则更改ro原创 2020-11-13 11:47:39 · 178 阅读 · 0 评论 -
【leetcode 938】【二叉搜索树的范围和】
leetcode 938【二叉搜索树的范围和】题目链接https://leetcode-cn.com/problems/range-sum-of-bst/解题思路与代码思路:递归法有两种写法,一种是写一个递归辅助函数并记录相加的值,一种是直接递归本函数并且直接返回。代码:写法一class Solution: def rangeSumBST(self, root: TreeNode, low: int, high: int) -> int: def dfs(原创 2020-11-12 11:56:28 · 251 阅读 · 1 评论 -
【leetcode 451】【根据字符出现频率排序】
leetcode leetcode 451【根据字符出现频率排序】题目链接https://leetcode-cn.com/problems/sort-characters-by-frequency/解题思路与代码思路:字典排序法第一个想法,创建字典,key是字母,value是计数,然后反序排序,按照字符串的set长度去遍历,使字母与次数相乘存到列表中,然后join连接最大堆法使用Counter直接计算次数,用元组负数存储次数和字符,创建最大堆,按照堆的长度做for循环,把堆顶一个个pop出来原创 2020-11-11 10:53:08 · 164 阅读 · 0 评论 -
【leetcode 692】【前K个高频单词】
leetcode题目链接https://leetcode-cn.com/problems/top-k-frequent-words/解题思路与代码思路:哈希排序法建立字典,把单词和频次对应记录下来,提取字典的items来排序,在快排的key中使用lambda,可以给频次添加负数就是倒序,然后再根据单词来排序最小堆法除了自己建立字典,也可以使用Counter直接获得一个字典,把字典的元素作为元组存到一个列表中,对列表建立最小堆,把k个最小堆顶的元素pop出。还有一种简单写法,nsmalles原创 2020-11-06 15:49:41 · 332 阅读 · 1 评论 -
【leetcode 1046】【最后一块石头的重量】
leetcode 1046【最后一块石头的重量】题目链接https://leetcode-cn.com/problems/last-stone-weight/解题思路与代码思路:列表排序法这个最直观,对列表进行排序,然后pop出来相减就完事了,while循环直到最后只剩下一个元素最大堆法首先把所有数字变成负数,就可以看成最大堆了。还是采用while循环,相减就完事了。最后再把负数转回来代码:列表排序法class Solution: def lastStoneWeight(se原创 2020-11-05 11:58:21 · 213 阅读 · 0 评论 -
【leetcode 394】【字符串解码】
leetcode 394【字符串解码】题目链接https://leetcode-cn.com/problems/decode-string/解题思路与代码思路:栈法这道题难点是可以内嵌括号,需要从内向外去拼接字符串,与栈的先入后出的特性对应。使用stack记录前一个框的multi和res,res记录字符串结果,multi记录数字每次碰到"["都把前一个multi和res记录下来,并重置multi和res碰到数字就记录下multi,这里乘以10是为了包括这个数字可能不止是个位碰到字母就原创 2020-11-03 14:20:56 · 764 阅读 · 0 评论 -
【leetcode 71】【简化路径】
leetcode 71【简化路径】题目链接https://leetcode-cn.com/problems/simplify-path/解题思路与代码思路:主要是对特殊字符的一个处理,只留真正有用的路径在栈中,然后再取出来。对于斜杆“/”,可能存在多个,都过滤掉只剩下一个,′..′'..'′..′代表前一个目录,当它不在首部时,将′..′'..'′..′和前一个元素pop出去,如果在首部,就只将′..′'..'′..′去除elif ielif \ \ ielif 原创 2020-11-02 14:51:22 · 190 阅读 · 0 评论 -
【leetcode 232】【用栈实现队列】
leetcode232用栈实现队列示例:使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。解题思路:栈是先进后出,队列是先入先出,为了实现队列的逻辑,那么需要两个栈。一个是输入栈,一个是输出栈。输入栈用于存放push进来的元素,当要进行pop或者peek操作时,需要把输入栈内容全部转移到输出栈中,此时顺序就正确了,可以对输出栈进行pop和peek操作。而e原创 2020-10-30 11:05:14 · 173 阅读 · 0 评论 -
【leetcode 662】【设计循环队列】
leetcode 662【设计循环队列】题目链接https://leetcode-cn.com/problems/design-circular-queue/解题思路与代码思路:数组实现通过头指针、队列长度、数组长度推断尾指针的位置tailIndex=(headIndex+count−1) mod capacitytailIndex=(headIndex+count−1) \ mod \ capacitytailIndex=(headIndex+count−1)原创 2020-10-29 16:24:56 · 205 阅读 · 0 评论 -
【leetcode 225 】【队列实现栈】
leetcode 225【队列实现栈】使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空题目链接https://leetcode-cn.com/problems/implement-stack-using-queues/解题思路与代码思路:双队列法利用辅助队列的方式,queue1用于存储栈内的元素,queue2作为入栈操作的辅助队列,直接看动图理解一切 。 可以把列表改成collecti原创 2020-10-29 14:14:41 · 154 阅读 · 0 评论 -
【leetcode 993】【二叉树的堂兄弟节点】
leetcode 993【二叉树的堂兄弟节点】这道题给出二叉树root,x和y,要解决的问题是在树中找到x和y,并且确定它们是否为堂兄弟节点的关系。题目链接https://leetcode-cn.com/problems/cousins-in-binary-tree/解题思路与代码思路:队列实现、BFS广度优先遍历每一层,存入队列中,判断x和y是否在同一层,如果在,就是判断是否为堂兄弟节点。在同一层中,只有相邻节点并且右边的节点的索引为奇数、左边节点索引为偶数时,才是同一个父节点。如果不满足上原创 2020-10-29 11:51:18 · 310 阅读 · 0 评论 -
【leetcode 560】【和为k的子数组】
leetcode 560 和为k的子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例:输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。解题思路与代码思路:理解前缀和的思路对于数组nums,我们可以创建一个前缀和数组preSum:preSum[i]=nums[0...(i−1)]preSum[i] = nums[0...(i-1)]preSum[i]=nums[0...(i−1)] 的原创 2020-10-20 15:42:00 · 220 阅读 · 0 评论 -
【leetcode 49】【字母异位词分组】
leetcode49 字母异位词分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]解题思路与代码思路:在写代码的时候,发现难点在于对哈希表和python字典的运用,以及列表中的列表的拆解。写代码或思考时,最好在纸张上画一下排序法排序是对列表中的每个字原创 2020-10-19 16:16:00 · 260 阅读 · 0 评论 -
【leetcode 389】【找不同】
leetcode 题目给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例:输入:s = “”, t = “y”输出:“y”输入:s = “a”, t = “aa”输出:“a”输入:s = “ae”, t = “aea”输出:“a”解题思路:三种解题方法:排序法、计数法和位运算法排序法对两个字符串排序,然后根据ttt的长度遍历,判断sss和ttt的对应位置是否相等,如果是就直接返回。原创 2020-10-19 11:25:21 · 198 阅读 · 0 评论 -
【leetcode 217】【存在重复元素】
leetcode 题目给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例:输入: [1,2,3,1]输出: true输入: [1,2,3,4]输出: false解题思路:一共有三种方法,分别是字典法,排序法和set集合法。字典法遍历列表,把元素依次放入字典中,数值作为key。在前面添加一个判断元素是否在字典内,如果是则返回True,若遍历完列表还是没有返回,则返回False。排序法原创 2020-10-19 10:51:03 · 247 阅读 · 0 评论 -
【leecode 24】【两两交换链表中的节点】
leetcode 24 两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:输入:head = [1,2,3,4]输出:[2,1,4,3]解题思路:暴力法通常需要创建一个新的链表头来存储结果,并因为需要做指针的交换,设置一个空节点去连接head是很有帮助的。这道题需要注意判断结束循环的条件,考虑链表的节点个数是奇偶数的情况,理清楚交换指针的顺序。看下面动图递归法不需要创建新结点,但是一定要搞清原创 2020-10-16 15:22:56 · 212 阅读 · 0 评论 -
【leetcode 2】【两数相加】
leetcode 题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807解题思路:根据加法的准则,从链表头开始相加,原创 2020-10-15 14:52:41 · 178 阅读 · 0 评论 -
【leetcode169】【求众数】
leetcode 169 多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例:输入: [3,2,3]输出: 3输入: [2,2,1,1,1,2,2]输出: 2解题思路:暴力法写两个循环,第一个循环所有数,第二个循环计算这个数出现的次数,count>...原创 2020-04-09 22:32:43 · 213 阅读 · 0 评论 -
【leetcode50】【Pow(x, n)幂函数】
leetcode 50 Pow(x, n)实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例:输入: 2.00000, 10输出: 1024.00000输入: 2.00000, -2输出: 0.25000解释: 2−2=1/222^{-2} =1/2^{2}2−2=1/22 = 1/4 = 0.25解题思路:暴力法:写个循环,循环n次乘以一个x,O(N)分治...原创 2020-04-02 21:48:13 · 324 阅读 · 0 评论 -
【leetcode236/235】【二叉(搜索)树的最近公共祖先】
leetcode 236 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例:例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]输入: ...原创 2020-03-30 21:59:14 · 157 阅读 · 0 评论 -
【leetcode20】【有效括号】
leetcode 20 有效括号示例:给定大中小括号,判断字符串是否有效,左括号必须用相同类型的右括号闭合。2. 左括号必须以正确的顺序闭合。输入: “()”输出: true输入: “(]”输出: false解题思路:用stack来解决,常见解法。要留意的3个点:左括号来了,那么直接push进去stack里右括号来了,不能单独存在,需要匹配左括号,查看栈顶是否有与其...原创 2020-03-19 17:32:10 · 186 阅读 · 0 评论 -
【leetcode703】【返回数据流中的第K大元素】
返回数据流中的第K大元素设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。示例:int k = 3;int[] arr = [4,5,8,2];KthLarg...原创 2020-03-26 17:14:37 · 377 阅读 · 0 评论 -
【leetcode239】【滑动窗口最大值】
leetcode 239 滑动窗口最大值给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释: ------------滑动窗口的位置 ...原创 2020-03-27 14:52:09 · 219 阅读 · 0 评论 -
【leetcode242/】【有效字母异位词】
leetcode 242 有效字母异位词(anagram)给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例:输入: s = “anagram”, t = “nagaram”输出: true输入: s = “rat”, t = “car”输出: false解题思路:解法一:排序法对单词排序,再进行比较. O(nlogn) , 空间为O(1)...原创 2020-03-27 15:52:48 · 150 阅读 · 0 评论 -
【leetcode1/15】【两数之和&三数之和】
leetcode 1 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [...原创 2020-03-29 11:27:47 · 224 阅读 · 0 评论 -
【leetcode98/】【验证二叉搜索树 】
leetcode 98 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:1.节点的左子树只包含小于当前节点的数。2.节点的右子树只包含大于当前节点的数。3.所有左子树和右子树自身必须也是二叉搜索树。示例:解题思路:代码思路:代码:复杂度分析:\color{red}{复杂度分析:}复杂度分析:进阶分析:...原创 2020-03-29 17:58:14 · 184 阅读 · 0 评论