![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
贪心算法
贪心算法
Huiex胖子君
广告位招租
展开
-
665. 非递减数列
要根据题目的思路,非递减,就用当前的和前面的比较,在出现 nums[i] < nums[i - 1] 时,需要考虑的是应该修改数组的哪个数,使得本次修改能使 i 之前的数组成为非递减数组,并且不影响后续的操作(重点, 局部最优)优先考虑令 nums[i - 1] = nums[i],因为如果修改 nums[i] = nums[i - 1] 的话,那么 nums[i] 这个数会变大,就有可能比 nums[i + 1] 大,从而影响了后续操作。还有一个比较特别的情况就是 nums[i] &..原创 2021-10-23 11:50:17 · 98 阅读 · 0 评论 -
392. 判断子序列
保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。将s的每个字符在t中查找,如果查找到,那么下一个字符从查找的下一个的下标开始查询public static boolean isSubsequence(String s, String t) { int temp = 0; char[] str = s.toCharArray(); for (char i : str) { if(t.indexOf(i, temp) >= 0) { temp = t...原创 2021-10-23 09:08:31 · 55 阅读 · 0 评论 -
605. 种花问题
public static boolean canPlaceFlowers(int[] flowerbed, int n) { int num = 0; if(flowerbed.length == 1 && flowerbed[0] == 0) { flowerbed[0] = 1; num++; } if(flowerbed[0] == 0 && flowerbed[1] != 1 && flowerbed.l...原创 2021-10-22 13:06:02 · 53 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
假设数组为[1,2,3,5,2,5]直接使 i 减去 i-1 就行,因为 2-1+3-2+5-23= 5-1所以直接计算两个相邻元素的差值(后面的要比前面的数大)差值相加就是结果public int maxProfit(int[] prices) { int res = 0; for (int i = 1; i < prices.length; i++) { if(prices[i] > prices[i - 1]) { r...原创 2021-10-22 11:42:02 · 49 阅读 · 0 评论 -
121. 买卖股票的最佳时机
只要记录前面的最小价格,将这个最小价格作为买入价格,然后将当前的价格作为售出价格,查看当前收益是不是最大收益。 public static int maxProfit(int[] prices) { int price = 0; int min = prices[0]; int max = 0; for(int i = 1; i < prices.length; i++) { if(prices[i] > min) { max = Math.m原创 2021-10-22 09:37:00 · 51 阅读 · 0 评论 -
406. 根据身高重建队列
思路 让最高的人站在前面(降序),例如[7,0],然后[7,1](升序) 符合单个最优解 再将低的人插入高的人前面(高的人已完成的排序也不会受到影响) public static int[][] reconstructQueue(int[][] people) { /** * 思路 让最高的人站在前面(降序),例如[7,0],然后[7,1](升序) 符合单个最优解 再将低的人插入高的人前面(高的人...原创 2021-10-18 16:44:32 · 57 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球
保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。public static int findMinArrowShots(int[][] points) { //先进行排序 Arrays.sort(points,new Comparator<int[]>() { @Override public int compare(int[] arr1,int[] arr2) { if (arr1[1] > arr2[1]..原创 2021-10-18 19:00:00 · 48 阅读 · 0 评论 -
435.不重叠的区间个数
区间开头越大,留给前面区间的空间越大,(局部最优的)1.按区间的开头进行排序()2.让当前区间的结尾和上一个区间的头部比较大小3.如果当前区间的结尾超过了上一个区间的头部,意味着覆盖了 public static int eraseOverlapIntervals(int[][] intervals) { //先将各个区间数组根据左界限arr[0] 进行从大到小排序(重写Comparator方法) Arrays.sort(intervals,new Compa原创 2021-10-17 11:33:02 · 112 阅读 · 0 评论 -
455.分配饼干
贪心算法尽量用最小的饼干去满足胃口。因为可以保留更大的饼干去满足胃口尽量先让最小的胃口得到满足。因为胃口小容易被满足保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。public static int findContentChildren(int[] g, int[] s) { //先将两个数组排序 Arrays.sort(g);//胃口 Arrays.sort(s);//饼干 int temp = 0;原创 2021-10-17 09:37:39 · 90 阅读 · 0 评论