贪心算法
贪心算法
基本定义
- 顾名思义,贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的
常见问题及求解
1.分配问题
-
题目:有一群孩子和一堆饼干,每个孩子有一个饥饿度,每个饼干都有一个大小,每个孩子只能吃最多一个饼干,且只有饼干的大小大于孩子的饥饿度时,这个孩子才能吃饱,求解,最多有多少孩子可以吃饱?
-
输入输出案例
输入:1 2//代表有两个孩子,饥饿度分别为1和2 1 2 3//有三个饼干,饼干大小分别为1 2 3 输出:2//有两个孩子能吃饱 -
题解
因为饥饿度最小的孩子最容易吃饱,所以我们先考虑这个孩子,为了尽量使得剩下的饼干可以满足饥饿度更大的孩子,所以我们应该把大于等于这个孩子饥饿度的、且大于最小的饼干给这个孩子。满足了这个孩子之后,我们采用同样的策略,考虑剩下孩子里饥饿度最小的孩子,直到没有满足条件的饼干存在。
简而言之,这里的贪心策略是给剩余孩子里最小饥饿度的孩子分配最小的,能饱腹的饼干,至于具体实现,因为我们需要获得大小关系,一个便携的方法,就是把孩子和饼干分别排序,这样我们就可以从饥饿度最小的孩子和大小最小的饼干出发,计算有多少个孩子可以满足条件。
-
代码解析
package 贪心算法; import java.util.Arrays; public class Demo01 { static int solution(int[]children,int[]cookies){ Arrays.sort(children); Arrays.sort(cookies); int child=0;//能吃饱孩子的个数 int cookie=0; while(child
2.买卖股票的最佳时机问题
-
题目:给定一个数组,他的第i个元素是一支给定股票的第i天的价格
? 设计一个算法来计算你所能获取的最大利润,你可以尽可能的完成更多的交易,注意你不能同时参与多笔交易。
-
输入输出案例
输入:[7,1,5,3,6,4] 输出:7 解释:在第二天(股票价格为1)的时候买入,在第三天(股票价格为5)的时候卖出这笔交易所能获得利润为4 随后在第四天(股票价格为3)的时候买入,在第五天(股票价格为6)的时候卖出这笔交易所能获得的利润为3 -
代码解析
package 贪心算法; import java.util.Arrays; public class Demo01 { static int solution(int[]prices){ int profit=0; for (int i = 0; i < prices.length-1; i++) { if (prices[i]