前言
###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!
习题
1.重新分装苹果
题目链接:3074. 重新分装苹果 - 力扣(LeetCode)
题面:
分析:优先用容量大的箱子即可
代码:
class Solution {public int minimumBoxes(int[] apple, int[] capacity) {int sum = 0;for(int a:apple)sum+=a;Arrays.sort(capacity);int count = 0;for(int i = capacity.length-1;i>=0;i--){count++;sum-=capacity[i];if(sum<=0)return count;}return 0;}
}
2.装满石头的背包的最大数量
题目链接:2279. 装满石头的背包的最大数量 - 力扣(LeetCode)
题面:
分析:预处理出差值数组,然后优先最少的即可
代码:
class Solution {public int maximumBags(int[] capacity, int[] rocks, int additionalRocks) {int n = capacity.length;for(int i = 0;i<n;i++){capacity[i]-=rocks[i];}Arrays.sort(capacity);int count = 0;for(int i = 0;i<n;i++){if(capacity[i]>additionalRocks)return count;count++;additionalRocks-=capacity[i];}return count;}
}
3.雪糕的最大数量
题目链接: 1833. 雪糕的最大数量 - 力扣(LeetCode)
题面:
代码:
class Solution {public int maxIceCream(int[] costs, int coins) {Arrays.sort(costs);int count = 0;for(int a:costs){if(a>coins)return count;count++;coins-=a;}return count;}
}
4.K次取反后最大化的数组和
题目链接:1005. K 次取反后最大化的数组和 - 力扣(LeetCode)
题面:
分析:先排序,然后优先让最小的负数编程正数,如果k有多余,再次排序,让最小的那个数进行剩下的操作
代码:
class Solution {public int largestSumAfterKNegations(int[] nums, int k) {Arrays.sort(nums);int n = nums.length;for(int i = 0;i<n&&nums[i]<=0&&k>0;i++){k--;nums[i] = -nums[i];}if(k>0){Arrays.sort(nums);k%=2;nums[0] = k==1?-nums[0]:nums[0];}int sum = 0;for(int i = 0;i<n;i++){sum+=nums[i];}return sum;}
}
后言
上面是力扣贪心专题,下一篇是其他的习题,希望有所帮助,一同进步,共勉!