leetcode
做题笔记
黑人月
student&&vegetable
展开
-
【二叉搜索树】操作汇总
二叉搜索树原创 2022-01-21 11:34:34 · 278 阅读 · 0 评论 -
【动态规划】背包问题汇总
背包问题原创 2022-01-19 14:56:26 · 316 阅读 · 0 评论 -
剑指 Offer II 103. 最少的硬币数目
class Solution { public int coinChange(int[] coins, int amount) { int[] dp = new int[amount+1]; //创建一个amount+1大小的动态数组,0~amount dp[0]=0; //面值为0的时候返回0个硬币 for(int i=1;i<=amount;i++) //给其余面值赋初始值amount+1,因为返回最多硬币的情况就是amoun原创 2021-11-16 15:46:46 · 1976 阅读 · 0 评论 -
300. 最长递增子序列
经典的动态规划算法,但是这种时间复杂度是O(n2),用二分查找法应该能降到O(nlogn),但是我不会,有空再学 类似的还有128题、673(300的进阶,让输出最长子序列的个数) class Solution { public int lengthOfLIS(int[] nums) { int [] dp =new int[nums.length]; 定义dp数组,dp[i]含义是以nums[i]结尾的最长子序列长度 Arrays.fill(dp,1); dp原创 2021-11-17 17:49:25 · 2145 阅读 · 0 评论 -
354. 俄罗斯套娃信封问题(良心注释)
问题描述 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。 请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。 输入:envelopes = [[5,4],[6,4],[6,7],[2,3]] 输出:3 解释:最多信封的个数为 3, 组合为: [2,3] => [5,4]原创 2021-11-18 20:08:10 · 1130 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和
题目描述: 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 思路: 类似于动态规划的最长递增子序列,dp[i]表示以nums[i]结尾的最大连续子数组的和 代码实现: class Solution { public int maxSubArray(int[] nums) { i原创 2021-11-19 16:33:17 · 1831 阅读 · 0 评论 -
1143. 最长公共子序列【经典的动态规划,图文解析】
题目描述: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。 两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。 输入:text1 = “abcde”, text2 = “a原创 2021-11-20 17:14:59 · 1997 阅读 · 0 评论 -
516. 最长回文子序列【动态规划】
问题描述: 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 输入:s = “bbbab” 输出:4 解释:一个可能的最长回文子序列为 “bbbb” 。 输入:s = “cbbd” 输出:2 解释:一个可能的最长回文子序列为 “bb” 。 算法思想: dp[i][j]表示字符串s[i…j]的最长回文子序列 此时i<=j, 如果i=j,则表示此时只有一个字符,它也就是子串,所以长度为1原创 2021-11-22 22:01:56 · 1869 阅读 · 0 评论