leetcode热题top100
leetcode热题top100
阿清~
这个作者很懒,什么都没留下…
展开
-
122. 买卖股票的最佳时机 II
题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候原创 2020-11-08 11:53:53 · 167 阅读 · 0 评论 -
349. 两个数组的交集
题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]思路排序+双数组代码class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: ans = []原创 2020-11-02 14:48:42 · 783 阅读 · 0 评论 -
234. 回文链表
题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true思路先把链表中的节点值依次存放到数组中,在利用双指针法判断回文。代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { v原创 2020-10-23 20:28:16 · 152 阅读 · 0 评论 -
416. 分割等和子集
题目给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].思路这道题可以转化为,判断从是否可以从数组中选出一些数字,使得这些数字的和等于整个数组的元素和的一半,也就是经典的01背包问题,使用动态规划求解。定义二维数组dp[n][target-1]。dp[i][j]表示原创 2020-10-11 21:00:15 · 136 阅读 · 0 评论 -
75. 颜色分类
题目给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]代码class Solution: def sortColors(self, nums: List[int]) -> None: """原创 2020-10-07 13:33:50 · 93 阅读 · 0 评论 -
6. Z 字形变换
题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入: s = “L原创 2020-10-06 14:41:14 · 147 阅读 · 0 评论 -
18. 四数之和
题目给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[[-1, 0, 0, 1],[-2, -1, 1, 2],[-2, 0, 0, 2]]代码cl原创 2020-10-05 18:42:45 · 89 阅读 · 0 评论 -
15. 三数之和
题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]思路关键在于如何去重。排序+双指针。先锁定一个元素,在利用双指针从剩余元素中寻找符合条件的值。每一个元素都要去重。代码class原创 2020-10-02 15:31:01 · 111 阅读 · 1 评论 -
771. 宝石与石头
题目给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。输入: J = “aA”, S = “aAAbbbb”输出: 3代码方法一:暴力解法class Solution: def numJewelsInStones(self, J: str, S: str) -> int:原创 2020-10-02 14:46:11 · 70 阅读 · 0 评论 -
LCP 19. 秋叶收藏集
题目小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片黄叶。出于美观整齐的考虑,小扣想要将收藏集中树叶的排列调整成「红、黄、红」三部分。每部分树叶数量可以不相等,但均需大于等于 1。每次调整操作,小扣可以将一片红叶替换成黄叶或者将一片黄叶替换成红叶。请问小扣最少需要多少次调整操作才能将秋叶收藏集调整完毕。示例 1:输入:leaves = “rrryyyrry原创 2020-10-01 09:54:26 · 122 阅读 · 0 评论 -
701. 二叉搜索树中的插入操作
题目给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。代码python版:# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None原创 2020-09-30 15:45:10 · 102 阅读 · 0 评论 -
538. 把二叉搜索树转换为累加树
题目给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。思路反中序遍历代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right =原创 2020-09-21 15:26:23 · 49 阅读 · 0 评论 -
46. 全排列
题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]代码class Solution: def permute(self, nums: List[int]) -> List[List[int]]: if not nums: return [] size = len(nums) fl原创 2020-09-18 16:33:51 · 73 阅读 · 0 评论 -
11. 盛最多水的容器
题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49思路双指针代码import sysdef maxArea(height): if len(height) == 0 or l原创 2020-09-15 10:02:14 · 117 阅读 · 0 评论 -
94. 二叉树的中序遍历
题目给定一个二叉树,返回它的中序 遍历。用递归完成代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def inorderTraversal(self, root: TreeNode原创 2020-09-14 09:21:18 · 88 阅读 · 0 评论 -
5. 最长回文子串
题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”思路动态规划当字符串 s[i...j] 的长度为1,则它是回文串;当字符串s[i...j]的长度为2,且s[i]=s[j],则它是回文串,否则不是;当字符串s[i...j]的长度大于2,如果s[i]=s[j],并且s[i+1...j-1]是回文串,则它是回文串原创 2020-09-11 20:06:28 · 78 阅读 · 0 评论 -
最长公共子串(求长度和寻找子串)
问题最长公共子串问题是寻找两个或多个已知字符串最长的子串。此问题与最长公共子序列问题的区别在于子序列不必是连续的,而子串却必须是。假设有两个字符串,找出其中最长的公共连续子串,输出其长度,并求出该最长公共子串。输入:abcdebcd输出:3bcd思路动态规划填表格代码def maxLengthStr(a,b): n = len(a) m = len(b) res = [[0 for _ in range(m)] for _ in range(n)]原创 2020-09-10 14:42:12 · 514 阅读 · 0 评论 -
39. 组合总和
题目给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]思路回溯法官方题解:代码class Solution: def c原创 2020-09-09 10:48:54 · 70 阅读 · 0 评论 -
2. 两数相加
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路carry表示进位信息,carry的值只能是1或0。代码# Definition for singly-linke原创 2020-09-07 14:25:48 · 44 阅读 · 0 评论 -
LeetCode刷题——215. 数组中的第K个最大元素
题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。输入: [3,2,1,5,6,4] 和 k = 2输出: 5代码class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: h = [num for num in nums[:k]] heapq.heapify(h) for原创 2020-07-31 16:14:52 · 82 阅读 · 0 评论 -
347. 前 K 个高频元素
题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]思路哈希表+堆哈希表保存数组中的每个值以及它的出现频率,Python中用字典实现。维护一个大小为K的最小堆。堆中每个节点保存一个键值对,按照(value,key)的方式保存,可以使得堆是按照value值排序。代码class Solution: def topKFrequent(self, nums: List[int], k: int) -原创 2020-07-31 16:12:01 · 66 阅读 · 0 评论 -
1.两数之和
两数之和题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解法...原创 2019-12-29 19:35:10 · 130 阅读 · 0 评论 -
107. 二叉树的层次遍历 II
题目给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7]思路参考 从上到下打印二叉树代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None#原创 2020-09-06 13:16:53 · 64 阅读 · 0 评论