- 博客(159)
- 收藏
- 关注
原创 2022.07.19(LC_剑指 Offer II 041. 滑动窗口的平均值)
由于数字进入滑动窗口和移出滑动窗口的规则符合先进先出,因此可以使用队列存储滑动窗口中的数字,同时维护滑动窗口的大小以及滑动窗口的数字之和。
2022-07-19 11:25:18 166
原创 2022.07.10(LC_6112_装满杯子需要的最短总时长)
方法二: //注:不管remainder是奇数还是偶数,都可以统一写成如下形式 //转换过程:首先(remainder - 1) / 2 + 1 + amount[2]转换后就是以下形式 //然后remainder / 2 + amount[2]先写成(amount[0] + amount[1] + amount[2]) / 2 //由于remainder是偶数,2amount[2]也是偶数,所以amount[0] + amount
2022-07-10 16:09:31 85
原创 2022.06.16(LC_152_乘积最大子数组)
①确定状态: maxP[i]表示以nums[i]结尾的最大子数组乘积; minP[i]表示以nums[i]结尾的最小子数组乘积;②转移方程: maxP[i] = Math.max(nums[i], Math.max(maxP[i - 1] * nums[i], minP[i - 1] * nums[i])); minP[i] = Math.min(nums[i], Math.min(minP[i - 1] * nums[i], maxP[i - 1]
2022-06-16 10:45:54 76
原创 2022.06.15(LC_221_最大正方形)
方法:动态规划①确定状态:dp[i][j]表示以(i,j)为右下角的正方形最大边长;②转移方程: ③初始条件和边界情况:i = 0,j = 0;④计算顺序:因为dp[i][j]由dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1] 推出,所以从小到大遍历。......
2022-06-15 22:39:08 47
原创 2022.06.15(LC_1277_统计全为 1 的正方形子矩阵)
①确定状态:dp[i][j]表示以(i,j)为右下角的正方形最大边长;②转移方程: ③初始条件和边界情况:i = 0,j = 0;④计算顺序:因为dp[i][j]由dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1] 推出,所以从小到大遍历。证明过程:1277. 统计全为 1 的正方形子矩阵的官方题解...
2022-06-15 22:29:55 198
原创 2022.06.15(LC_64_最小路径和)
①确定状态:dp[i][j]表示到grid[i][j]路径上的最小数字总和;②转移方程:dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];③初始条件和边界情况:dp[0][0] = grid[0][0];④计算顺序:因为dp[i][j] 由dp[i - 1][j]和dp[i][j - 1]推出,所以从小到大遍历。...
2022-06-15 21:05:30 102
原创 2022.06.15(LC_322_零钱兑换)
①确定状态:dp[i] 表示凑成总金额 i 所需的最少硬币个数;②转移方程:dp[i] = Math.min(dp[i], dp[i - coin] + 1); ③初始条件和边界情况:dp[i] = 0;④计算顺序:因为dp[i] 由 dp[i - coin] 推出,所以从小到大遍历。...
2022-06-15 17:34:46 79
原创 2022.05.29(LC_6079_价格减免)
方法:模拟import java.text.DecimalFormat;class Solution { public String discountPrices(String sentence, int discount) { String[] str = sentence.split(" "); for (int i = 0; i < str.length; i++) { if (satisfy(str[i])) { ...
2022-05-29 15:58:02 46
原创 2022.05.29(LC_6078_重排字符形成目标字符串)
方法:计数class Solution { public int rearrangeCharacters(String s, String target) { Map<Character, Integer> tMap = new HashMap<>(); for (char ch : target.toCharArray()) { tMap.put(ch, tMap.getOrDefault(ch, 0) + ..
2022-05-29 15:18:23 54
原创 2022.05.28(LC_516_最长回文子序列)
方法:动态规划①确定状态:dp[i][j]表示字符串s的下标范围[i, j]内的最长回文子序列长度;②转移方程:if(s.charAt(i)==s.charAt(j)){//长度为1或2的子序列if(j-i<2){dp[i][j]=j-i+1;//长度大于2的子序列...
2022-05-28 16:00:09 52
原创 2022.05.28(LC_5_最长回文子串)
方法一:暴力求解class Solution { public String longestPalindrome(String s) { int n = s.length(); String ans = ""; int maxLen = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j <= n; j++) { ..
2022-05-28 15:02:52 50
原创 2022.05.27(LC_647_回文子串)
方法一:暴力求解(O(n^3))class Solution { public int countSubstrings(String s) { int n = s.length(); int ans = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j <= n; j++) { if (satisfy(s.subst..
2022-05-27 22:37:37 62
原创 2022.05.26(LC_1143_最长公共子序列)
方法:动态规划①确定状态:dp[i][j]表示长度[0, i - 1]的字符串text1与长度[0, j - 1]的字符串text2的最长公共子序列;②转移方程:dp[i][j]=dp[i−1][j−1]+1, 当 text1[i - 1] == text2[j - 1];dp[i][j]=Math.max(dp[i−1][j],dp[i][j−1]), 当 text1[i - 1] != text2[j - 1];③初始条件和边界情况:dp[i...
2022-05-26 21:20:41 94
原创 2022.05.25(LC_718_最长重复子数组)
方法一:暴力求解 (写不出来)class Solution { public int findLength(int[] nums1, int[] nums2) { int n1 = nums1.length, n2 = nums2.length; if (n1 < n2) return findLength(nums2, nums1); int ans = 0; for (int i = 0; i < n1; i+..
2022-05-25 22:30:59 60
原创 2022.05.24(LC_674_最长连续递增序列)
方法一:枚举class Solution { public int findLengthOfLCIS(int[] nums) { int n = nums.length; int ans = 0; for (int i = 0; i < n; i++) { int pre = nums[i]; int count = 1; for (int j = i + 1; j..
2022-05-25 21:46:12 57
原创 2022.05.23(LC_300_最长递增子序列)
方法:动态规划①确定状态:dp[i] 为i之前包括i的以nums[i]结尾最长递增子序列长度;②转移方程:位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 + 1 的最大值,所以:if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1),注意这里不是要dp[i] 与 dp[j] + 1进行比较,而是要取dp[j] + 1的最大值;③初始条件和边界情况:dp[0] = 1,每一个i,对应的dp[i](即最长上升...
2022-05-23 22:33:57 80
原创 2022.05.22(LC_6076_表示一个折线图的最少线段数)
方法:计算斜率--注意先排序--注意溢出和精度损失问题class Solution { public int minimumLines(int[][] stockPrices) { int n = stockPrices.length; if (n == 1) return 0; if (n == 2) return 1; Arrays.sort(stockPrices, (a, b) -> a[0] - b[0..
2022-05-22 11:38:46 65
原创 2022.05.22(LC_6075_装满石头的背包的最大数量)
方法:贪心class Solution { public int maximumBags(int[] capacity, int[] rocks, int additionalRocks) { int n = capacity.length; List<Integer> list = new ArrayList<>(); for (int i = 0; i < n; i++) { if (..
2022-05-22 11:35:43 94
原创 2022.05.22(LC_6074_字母在字符串中的百分比)
方法:简单计算class Solution { public int percentageLetter(String s, char letter) { int count = 0; for (char ch : s.toCharArray()) { if (ch == letter) { count++; } } return count * 1..
2022-05-22 11:32:34 50
原创 2022.05.21(LC_213_打家劫舍 II)
方法:动态规划class Solution { public int rob(int[] nums) { int n = nums.length; if (n == 1) { return nums[0]; } else if (n == 2) { return Math.max(nums[0], nums[1]); } return Math.max(ro...
2022-05-21 19:41:48 121
原创 2022.05.20(LC_198_打家劫舍)
方法:动态规划①确定状态:dp[i] 为偷窃第 i +1个房屋的最高金额;②转移方程:dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);③初始条件和边界情况:dp[0]=nums[0];dp[1]=Math.max(nums[0],nums[1]);④计算顺序:因为 dp[i] 由 dp[i-1] 和 dp[i-2]推出,所以从前往后遍历--一维数组class Solution { public int rob(...
2022-05-20 21:20:31 93
原创 2022.05.20(LC_474_一和零)
方法:动态规划(转化为01背包)--三维数组class Solution { public int findMaxForm(String[] strs, int m, int n) { int length = strs.length; int[][][] dp = new int[length + 1][m + 1][n + 1]; for (int i = 1; i <= length; i++) { ...
2022-05-20 20:45:59 78
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人