摘要: 思路:因为第一个和最后一个不能同时选,所以将环形分成两段[0,len-2]和[1,len-1],分别用"打家劫舍1"求解,然后求最大值即可。 class Solution { public int rob(int[] nums) { int len=nums.length; if(len==1) r 阅读全文
posted @ 2022-03-24 21:35 livingsu 阅读(22) 评论(0) 推荐(0)
摘要: 本题仍是0-1背包问题,只不过背包的容量限制从一维变成了两维。 dp[i][j]: 最多有i个0和j个1的最大子集的长度 转移方程: dp[i][j]=max(dp[i][j],dp[i-zeroNum][j-oneNum]+1) zeroNum,oneNum是当前遍历到的字符串中0和1的数量 cl 阅读全文
posted @ 2022-02-26 20:01 livingsu 阅读(36) 评论(0) 推荐(0)
摘要: 由于nums中元素全为正数,设nums所有元素之和为sum,加号之和为x,则减号的绝对值之和为sum-x,则 x-(sum-x)=target 得到x=(sum+target)/2 所以问题变成:在nums中选择子集,使得子集之和为x的方案数量。 dp[i][j]: 0~i下标中选择,使得子集和为j 阅读全文
posted @ 2022-02-26 12:08 livingsu 阅读(30) 评论(0) 推荐(0)
摘要: 本题和分割等和子集基本一样,将stones分成两堆,两堆的和要尽可能的相同。 class Solution { public int lastStoneWeightII(int[] stones) { int sum=0; for(int s:stones) sum+=s; int num=solv 阅读全文
posted @ 2022-02-23 15:01 livingsu 阅读(25) 评论(0) 推荐(0)
摘要: 先求出总和sum,要求出是否存在子集,使得子集和为sum/2。 本题看做一个0-1背包问题:物品的重量和价值就是元素值,背包总承重是sum/2,可以求出背包能放下的最大价值,如果该值正好等于sum/2,说明正好装满 class Solution { public boolean canPartiti 阅读全文
posted @ 2022-02-23 12:08 livingsu 阅读(27) 评论(0) 推荐(0)
摘要: 一、0-1背包 有n个物品,它们的重量分别为weight[i],价值分别为value[i],现有一个承重为m的背包,每个物品要么拿一个,要么不拿,问背包能装下的最大价值。 2.1 二维数组 直观的动态规划是二维数组 dp[i][j]表示在下标为0-i的物品中选择,且背包承重为j时的最大价值 最后要求 阅读全文
posted @ 2022-02-23 11:53 livingsu 阅读(39) 评论(0) 推荐(0)
摘要: 贪心思想:尽量在父节点上放摄像头 用后序遍历,三种状态: 0: 无摄像头,并且没被覆盖 -1: 无摄像头,且被覆盖了 1: 有摄像头 class Solution { int num=0; public int minCameraCover(TreeNode root) { if(postOrder 阅读全文
posted @ 2022-02-22 17:38 livingsu 阅读(31) 评论(0) 推荐(0)
摘要: 贪心: class Solution { public int maxProfit(int[] prices, int fee) { int n=prices.length; int low=prices[0]; int ans=0; for(int i=1;i<n;i++){ if(prices[ 阅读全文
posted @ 2022-02-22 13:42 livingsu 阅读(29) 评论(0) 推荐(0)
摘要: class Solution { public int monotoneIncreasingDigits(int n) { char[] arr=Integer.toString(n).toCharArray(); int len=arr.length; int k=len; for(int i=l 阅读全文
posted @ 2022-02-22 13:18 livingsu 阅读(27) 评论(0) 推荐(0)
摘要: class Solution { public int eraseOverlapIntervals(int[][] intervals) { Arrays.sort(intervals,(a,b)->a[1]-b[1]); int n=intervals.length; int right=inte 阅读全文
posted @ 2022-02-21 21:05 livingsu 阅读(26) 评论(0) 推荐(0)