文章目录
🍋什么是贪心算法?
贪心算法:是一种思想,解答要根据具体题目来编写代码,它让每一步都是局部最优的方案。
🍋1. 分配饼干
题目描述链接
https://leetcode.cn/problems/assign-cookies/
题目特点
寻找最优解,一维数组。
代码实现
贪心大致思路:先边界判断,直接排序,后找到需要的情况返回。
public int findContentChildren(int[] g, int[] s) {
if (g==null || s==null){
return 0;
}
Arrays.sort(g);
Arrays.sort(s);
int i=0,j=0;
while(i<g.length&&j<s.length){
if (g[i]<=s[j]){
j++;
}
i++;
}
return j;
}
时间复杂度和空间复杂度
时间复杂度:O(NlogN);
空间复杂度:O(N)。
🍋2. 不重叠的区间个数
题目描述链接
https://leetcode.cn/problems/non-overlapping-intervals/
题目特点
寻找最优解,一维数组。
代码实现
贪心大致思路:先边界判断,直接排序,后找到需要的情况返回。
public int eraseOverlapIntervals(int[][] intervals) {
//边界判断
if (intervals==null){
return 0;
}
//排序
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return (o1[1]<o2[1])?-1:(o1[1]==o2[1]?0:1);
}
});
//找到符合条件的情况
int ans=0;
int right=intervals[0][1];
for (int i = 0; i < intervals.length; i++) {
if (intervals[i][0]>=right){
ans++;
right=intervals[i][1];
}
}
return intervals.length-ans;
}
时间复杂度和空间复杂度
时间复杂度:O(NlogN);
空间复杂度:O(N)。
🍋3. 投飞镖刺破气球
题目描述链接
https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/
题目特点
寻找最优解,一维数组。
代码实现
贪心大致思路:先边界判断,直接排序,后找到需要的情况返回。
public int findMinArrowShots(int[][] points) {
//先判断边界条件
if (points==null){
return 0;
}
//排序
Arrays.sort(points, new Comparator<int[]>() {