这题的思路还是很好想的,从小饼干开始,给每块饼干找能满足需求的小孩。需要先对数组排序。 或者从大饼干开始,找需求最大的小孩,先满足了。 两个思路看似很像,都是给饼干找小孩,实际写起来,第一个是找需求最低的小孩,第二个是找需求最高的小孩。判断条件不同。
class Solution {
public int findContentChildren(int[] g, int[] s) {
int count = 0;
Arrays.sort(g);
Arrays.sort(s);
int gi = 0;
int si = 0;
while(gi < g.length && si < s.length) {
if(g[gi] <= s[si]) {
count++;
gi++;
si++;
}
else if (g[gi] > s[si]) {
si++;
}
}
return count;
}
}
这题就没思路了。一开始集中在相邻元素间的比较,但比较相邻的差值更好写。
class Solution {
public boolean isNegative(int num) {
return num < 0;
}
public int wiggleMaxLength(int[] nums) {
if(nums.length <= 1) {
return nums.length;
}
int count = 1;
int lastDiff = 0;
int curDiff = 0;
for(int i=1; i<nums.length; i++) {
curDiff = nums[i] - nums[i-1];
if(lastDiff >= 0 && curDiff < 0 || lastDiff <= 0 && curDiff > 0) {
count++;
lastDiff = curDiff;
}
}
return count;
}
}
53. Maximum Subarray 贪心的题目确实是思路难找。这题的思路是如果连续子数组的和小于0,就把临时结果清零。
class Solution {
public int maxSubArray(int[] nums) {
int result = Integer.MIN_VALUE;
int count = 0;
for(int i=0; i<nums.length; i++) {
count += nums[i];
if(count > result) {
result = count;
}
if(count < 0) {
count = 0;
}
}
return result;
}
}