455 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
这道题的想法是:倒着来遍历已经排好序的胃口数组,用大饼干满足大胃口。
class Solution {
public int findContentChildren(int[] g, int[] s) {
if(g.length == 0 || s.length == 0){
return 0;
}
Arrays.sort(g);
Arrays.sort(s);
int sMax = s.length - 1;
int count = 0;
for(int i = g.length - 1;i >= 0;i--){
if(sMax >= 0 && s[sMax] >= g[i]){
count++;
sMax--;
}
}
return count;
}
}
376.
https://leetcode.cn/problems/wiggle-subsequence/
代码随想录 给了很详细的讲解,自己做真的不会
class Solution {
public int wiggleMaxLength(int[] nums) {
int pre = 0;
int after = 0;
int result = 1;
for(int i = 0;i<nums.length - 1;i++){
after = nums[i+1] - nums[i];
if((after > 0 && pre <= 0 )|| (pre >= 0 && after < 0)){
result++;
pre = after;
}
}
return result;
}
}
53.这道题用暴力解法超时/(ㄒoㄒ)/~~,贪心算法的想法是:
局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。
全局最优:选取最大“连续和”
class Solution {
public int maxSubArray(int[] nums) {
int result = Integer.MIN_VALUE;//令result为int类型里的最小值,
//这样即使nums数组里一直是负数,result也能更新成那个最大的负数
int sum = 0;
for(int i = 0; i < nums.length;i++){
sum = sum + nums[i];
//更新result,这里不管正数还是负数都更新
result = Math.max(sum,result);
if(sum < 0){
//sum为小于0的,加上只会是累赘,抛弃,重新开始加
sum = 0;
}
}
return result;
}
}