
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 · 112 阅读 · 0 评论 -
110平衡二叉数
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。题解:1. 要判断每个分支的高度,一旦有一个分支不是高度平衡二叉树,就返回Flase,只有左右子树都是高度平衡二叉树,才为True2. 用递归左右 每个分支的高度,求每个分支的高度又是一个递归求一棵树的高度:def maxhigth(r): if r==None: return 0 .原创 2021-08-01 21:54:10 · 104 阅读 · 0 评论 -
24.有效的括号
用list存储,用del 和pop最后一个元素原创 2021-07-31 10:33:44 · 113 阅读 · 0 评论 -
14.最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。这道题很有意思,主要是解法。思路:把第一个字符串最为外层循环,每次取第一个字符串的字符然后与strs中的每一个字符串的同一位置的字符进行对比,相同就计数,第二层循环就应...原创 2021-07-25 16:25:21 · 114 阅读 · 0 评论 -
两数相加:逆序链表
给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。链表1:243链表2:564相加后:708思路:1. 直接按照链表顺序相加就可以,不用把逆序的链表正回去2. 关键是有进位,每次加法都要加进位,进位是当前相加的value/10,那么进位后,该位置的数值是value%103. 指针的指向,每...原创 2021-07-21 17:31:58 · 347 阅读 · 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 · 118 阅读 · 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 · 91 阅读 · 0 评论 -
80.删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。题解:原地删除数组中出现大于两次的元素,使其最大出现次数为2记录出现次数大于2的下标的数据,然后删除class Solution: def removeDuplicates(self, nums: List[int]) -> int: count.原创 2021-05-31 22:28:33 · 94 阅读 · 0 评论 -
169 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。题解1 多数元素是超过总元素的个数的一半,简单来说输出可以看做是连续的元素个数最大的那个:如果当前的元素是和前一个元素相同:那么计数否则减数多数元素计数后虽然有减1,但结果总是大于0的,那么最后输出这个值class Solution: def majorityElement(self, nums...原创 2021-05-25 10:16:23 · 84 阅读 · 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 · 129 阅读 · 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 · 115 阅读 · 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 · 76 阅读 · 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 copyclass Solutio...原创 2021-04-18 10:52:23 · 149 阅读 · 1 评论 -
38.外观数组
'''给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:1. 12. 113. 214. 12115. 111221第一项是数字 1 描述前一项,这个数是 .原创 2021-04-15 20:15:52 · 109 阅读 · 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 · 538 阅读 · 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 · 135 阅读 · 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 · 85 阅读 · 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 · 926 阅读 · 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 · 480 阅读 · 0 评论 -
6. Z 字形变换 Python
6. Z 字形变换难度中等1060收藏分享切换为英文接收动态反馈将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行Z 字形排列。比如输入字符串为"PAYPALISHIRING"行数为3时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这个将字符串进行指定行数变换的函数:string conver...原创 2021-03-18 22:11:30 · 617 阅读 · 0 评论