贪心算法与动态规划的不同在于它对每个子问题的解决方案都做出选择 不能回退 动态规划则会保存以前的运算结果 并根据以前的结果对当前进行选择 有回退功能
饼干分发(贪心算法)
class Solution{
public
int findContentChildren(int [] g,int [] s){
if(gnull||snull) return 0;
Array.sort(g); 给两个数组排序 升序
Array.sort(s);
int
gi=0;
int
sj=0;
while(gi<g.length&&sj<s.length){ 当小孩和饼干的数量都不超过数组时
if(g[gi]<=s[sj]) {gi++;} else
sj++; 小孩的胃口小于等于饼干的大小就是gi+ 否则就是 sj+
}
return
gi;
}
}
买股票的最佳时机(贪心算法)
class Solution{
public
int maxProfit(int [] prices){
int
maxprofit=0;
for(int
i=1;i<prices.length;i++){
if(prices[i]>prices[i-1]) maxprofit+=prices[i]-prices[i-1]; 当后一天的价格高于前一天的时候就买入
}
return
maxprofit;
}
}
跳跃游戏(贪心)(反向贪心)
public boolean canJump(int [] nums){
if(nums==null) return false;
int
endReachable=nums.length-1; 双指针从最后面开始
for(int
i=nums.length-1;i>=0;i–){
if(nums[i]+i>=endReachable){ 当最后一个指针的位置加上层数i大于最后一个能跳到的位置就代表跳过去了
endReachable=i; 反复从后向前循环
}
}
return
endReacheable==0; 直到最后一个指针到达数组里的第一个数 证明可以跳出去
}