1.leetcode455 分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
public int findContentChildren(int[] g, int[] s) { Arrays.sort(g); Arrays.sort(s); int start = 0; int count = 0; for (int i = 0; i < s.length && start < g.length; i++) { if (s[i] >= g[start]) { start++; count++; } } return count; }
2.leetcode135分发糖果
n
个孩子站成一排。给你一个整数数组 ratings
表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
- 每个孩子至少分配到
1
个糖果。 - 相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
public static void main(String[] args) { int[] array1 = new int[] {1, 0, 2}; candy(array1); } public static int candy(int[] ratings) { int size = ratings.length; int sum = 0; if (size < 2) { return size; } int[] nums = new int[size]; nums[0] = 1; for (int i = 1; i < size; i++) { if (ratings[i] > ratings[i - 1]) { nums[i] = nums[i - 1] + 1; } else { nums[i] = 1; } } for (int i = size - 1; i > 0; i--) { if (ratings[i] < ratings[i - 1]) { nums[i - 1] = Math.max(nums[i - 1], nums[i] + 1); } } return Arrays.stream(nums).sum(); }
3.leetcode435 无重叠区间
给定一个区间的集合 intervals
,其中 intervals[i] = [starti, endi]
。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
public int eraseOverlapIntervals(int[][] intervals) { Arrays.sort(intervals, ((o1, o2) -> (o1[0] - o2[0]))); int res = 0; int end = intervals[0][1]; for (int i = 1; i < intervals.length; i++) { if (intervals[i][0] >= end) { end = intervals[i][1]; } else { end = Math.min(end, intervals[i][1]); res++; } } return res; }