LeetCode
Am_mSXQS
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
230 二叉搜索数第k个小的数
给定一个二叉搜索树的根节点 root ,和一个整数 k 请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 输入:root = [5,3,6,2,4,null,null,1], k = 3 输出:3 题解: 利用先序遍历,先将左孩子压入栈,到最左叶子节点的时候,出栈,先判断 计数君 == k?,如果相等了,输出弹出节点的值,否则 计数君 再计数,然后访问弹出节点的右孩子。 class Solution: def kthSmallest(self, root: T.原创 2021-08-11 15:05:04 · 142 阅读 · 0 评论 -
110平衡二叉数
给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 题解: 1. 要判断每个分支的高度,一旦有一个分支不是高度平衡二叉树,就返回Flase,只有左右子树都是高度平衡二叉树,才为True 2. 用递归左右 每个分支的高度,求每个分支的高度又是一个递归 求一棵树的高度: def maxhigth(r): if r==None: return 0 .原创 2021-08-01 21:54:10 · 137 阅读 · 0 评论 -
24.有效的括号
用list存储,用del 和pop最后一个元素原创 2021-07-31 10:33:44 · 145 阅读 · 0 评论 -
14.最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串""。 示例 1: 输入:strs = ["flower","flow","flight"] 输出:"fl" 示例 2: 输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。 这道题很有意思,主要是解法。 思路: 把第一个字符串最为外层循环,每次取第一个字符串的字符 然后与strs中的每一个字符串的同一位置的字符进行对比,相同就计数,第二层循环就应...原创 2021-07-25 16:25:21 · 154 阅读 · 0 评论 -
两数相加:逆序链表
给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0开头。 链表1:243 链表2:564 相加后:708 思路: 1. 直接按照链表顺序相加就可以,不用把逆序的链表正回去 2. 关键是有进位,每次加法都要加进位,进位是当前相加的value/10,那么进位后,该位置的数值是value%10 3. 指针的指向,每...原创 2021-07-21 17:31:58 · 375 阅读 · 0 评论 -
219. 存在重复元素 II
给定一个整数数组和一个整数k,判断数组中是否存在两个不同的索引i和j,使得nums [i] = nums [j],并且 i 和 j的差的 绝对值 至多为 k。 示例1: 输入: nums = [1,2,3,1], k = 3 输出: true 解题: 如果数组当中有重复的,且重复的这两个数的位置距离不超过k。这题给人的感觉就是容易超时的样子。 先把有重复的元素放在集合里,如果集合长度和nums的长度相同=》没有重复的元素,直接返回FALSE。 否则,从集合里拿一个数据去...原创 2021-06-24 20:50:01 · 150 阅读 · 1 评论 -
56.合并区间
输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 题解: 按照题意整就好了,值得注意的是 intervals 要按照第一列进行排序。8个排序方法中,先用冒泡进行尝试,果然超时,换成希尔排序后: class Solution: def merge(self, intervals: List[List[int]]) ->.原创 2021-06-01 21:11:43 · 112 阅读 · 0 评论 -
80.删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 题解: 原地删除数组中出现大于两次的元素,使其最大出现次数为2 记录出现次数大于2的下标的数据,然后删除 class Solution: def removeDuplicates(self, nums: List[int]) -> int: count.原创 2021-05-31 22:28:33 · 114 阅读 · 0 评论 -
169 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 题解 1 多数元素是超过总元素的个数的一半,简单来说输出可以看做是连续的元素个数最大的那个: 如果当前的元素是和前一个元素相同: 那么计数 否则 减数 多数元素计数后虽然有减1,但结果总是大于0的,那么最后输出这个值 class Solution: def majorityElement(self, nums...原创 2021-05-25 10:16:23 · 100 阅读 · 0 评论 -
17.电话号组合
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"] 示例 2: 输入:digits = "" 输出:[] 题解: 非DFS,虽然性能稍微差了点,但也用尽了我的智慧 手动狗头。 总体思路就是 两两字符 k 和 k1 拼接,再将结果给 k, 然后 k...原创 2021-05-16 17:09:34 · 201 阅读 · 0 评论 -
30. 串联所有单词的子串
给定一个字符串s和一些长度相同的单词words。找出 s 中恰好可以由words 中所有单词串联形成的子串的起始位置。 注意子串要与words 中的单词完全匹配,中间不能有其他字符,但不需要考虑words中单词串联的顺序。 示例 1: 输入: s = "barfoothefoobarman", words = ["foo","bar"] 输出:[0,9] 解释: 从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。 输出的顺序不重要, [9,0...原创 2021-05-06 22:02:05 · 139 阅读 · 0 评论 -
19.删除链表的倒数第N个结点
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 题解: 双指针,第一个指针和第二个指针之间相差N个位置,当第一个指针指到空指针时,第二个指针指向的位置就是要删除的第N个结点的前面的指针。 class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { int count =0; ListNode *abandant = new Lis.原创 2021-04-22 21:49:39 · 99 阅读 · 0 评论 -
49
输入: ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/group-anagrams 题解: 输出的元素是按照字典排序的,["ate","eat","tea"] 将组成元素相同的放在一起 import copy class Solutio...原创 2021-04-18 10:52:23 · 179 阅读 · 1 评论 -
38.外观数组
'''给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列: countAndSay(1) = "1" countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。 前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 第一项是数字 1 描述前一项,这个数是 .原创 2021-04-15 20:15:52 · 143 阅读 · 0 评论 -
31.下一个排列python
题目描述: 实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须 原地 修改,只允许使用额外常数空间。 示例 1: 输入:nums = [1,2,3] 输出:[1,3,2] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/next-permutation 题解: 这个题属于字典系列问题吧,给出1,2,3,按照字典的排序有原创 2021-04-12 20:33:23 · 565 阅读 · 0 评论 -
372.超级次方
同题型:50 计算ab对1337取模,a是一个正整数,b是一个非常大的正整数且会以数组形式给出。 题解: 计算了几个数字,就发现(x*y)%k=(x%k)*(y%k)%k,就神奇。 暴力解法会超时,换了两种算法后,才AC。 递归求每次的余数+50题的解法的pow(x,k) 由于4*4*4*4*4=(4*4)*(4*4*4),所以在求解a的b次幂的时候,对于输入4,【1,0,0】,4的100次方,就用到50题的题解。 def myPow(self, x: float, n: int...原创 2021-04-08 22:06:22 · 175 阅读 · 0 评论 -
22.括号生成
数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/generate-parentheses 题解 根左右遍历 class Solution: def generateParenthesis(self, n..原创 2021-04-01 20:31:09 · 112 阅读 · 0 评论 -
找出所有可以使数字和为 target 的组合
给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。 candidates中的数字可以无限制重复被选取。 说明: 所有数字(包括target)都是正整数。 解集不能包含重复的组合。 示例1: 输入:candidates = [2,3,6,7], target = 7, 所求解集为: [ [7], [2,2,3] ] 示例2: 输入:candidates = [2,3,5], targ...原创 2021-03-30 16:00:40 · 963 阅读 · 0 评论 -
三数之和 python
15. 三数之和 难度中等3121收藏分享切换为英文接收动态反馈 给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得a + b + c =0 ?请你找出所有和为0且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 示例 2: 输入:nums = [] 输出:[] 示例 3: 输入:nums = [0] ...原创 2021-03-22 20:46:44 · 517 阅读 · 0 评论 -
6. Z 字形变换 Python
6. Z 字形变换 难度中等1060收藏分享切换为英文接收动态反馈 将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行Z 字形排列。 比如输入字符串为"PAYPALISHIRING"行数为3时,排列如下: P A H N A P L S I I G Y I R 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。 请你实现这个将字符串进行指定行数变换的函数: string conver...原创 2021-03-18 22:11:30 · 656 阅读 · 0 评论
分享