贪心算法(Greedy )

目录

基本定义

1.分配问题

2.区间问题

3.买股票的最佳时期


基本定义

顾名思义,贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。

1.分配问题

有一群孩子和一堆饼干,每个孩子都有一个饥饿度,每个饼干都有一个大小。每个孩子最多只能吃一个饼干,且只有饼干的大小大于孩子的饥饿度时,这个孩子才能吃饱,求解最多有多少个孩子可以吃饱。

输入输出样例

输入:1,2
      1,2,3
输出:2

题解

因为饥饿度最小的孩子最容易吃饱,所以我们先考虑这个孩子。为了尽量使得剩下的饼干可以满足饥饿度更大的孩子,所以我们应该把大于等于这个孩子饥饿度的、且大小最小的饼干给这个孩子。满足了这个孩子之后,我们采取同样的策略,考虑剩下孩子里饥饿度最小的孩子,直到没有满足条件的饼干存在。

简而言之,这里的贪心策略是,给剩余孩子里最小饥饿度的孩子分配最小的能饱腹的饼干。至于具体实现,因为我们需要获得大小关系,一个便捷的方法就是把孩子和饼干分别排序。这样我们就可以从饥饿度最小的孩子和大小最小的饼干出发,计算有多少个对子可以满足条件。
 

import java.util.Arrays;

public class FindContentChildren
{
    static int solution(int[] children, int[]cookies
        {
              Arrays.sort(children);
              Arrays.sort(cookies);
              int child = 0;
              int cookies = 0;
              while (child < children.length && cookie < cookies.length)
              {
                  if (children[child] <= cookies[cookie++])child++;
               }
              return child;
        }
}

2.区间问题

给定多个区间,计算让这些区间互不重叠所需要移除区间的最少个数。起止相连不算重叠。

输入输出样例

输入是一个数组,数组由多个长度固定为2的数组组成,表示区间的开始和结尾。输出一个整数,表示需要移除的区间数量。

Input:[[1,2],[2,4],[1,3]]
Output:1

在这个样例中,我们可以移除区间[1,3],使得剩余的区间[1,2], [2,4]互不重叠。

题解

在选择要保留区间时,区间的结尾十分重要:选择的区间结尾越小,余留给其它区间的空间就越大,就越能保留更多的区间。

因此,我们采取的贪心策略为,优先保留结尾小且不相交的区间。具体实现方法为, 先把区间按照结尾的大小进行增序排序,每次选择结尾最小且和前一个选择的区间不重叠的区间。在样例中,排序后的数组为[[1,2], [1,3], [2,4]]。按照我们的贪心策略,首先初始化为区间[1,2];由于[1,3]与[1,2]相交,我们跳过该区间;由于[2,4]与[1,2]不相交,我们将其保留。因此最终保留的区间为[[1,2], [2.4].
 

public class eraseOverlapIntervals {

static int solution(int[][] intvls) {

Arrays. sort(intvls, new Comparator<int[]>() {

@override

public int compare(int[] o1, int[] o2) {

return o1[1 ]-o2[1];

}

});

int count = 0 ;

int pre = intvls[0][1];

for (int i = 1; i < intvls.length; 1++) {

if (intv1s[i][e] >= pre) {

count++;

pre = intvls[i][1];

}

return. intvls. length- count;
}

3.买股票的最佳时期

​ 给定一个数组,它的第1个元素是一支给定股 票第1天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票),

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)

输入输出样例
 
输入: [7,1,5,3,6,4]输出: 7解释:在第2天(股票价格=1)的时候买入,在第3天(股票价格=5)的时候卖出,这笔交易所能获得利润= 5-1=4。随后,在第4天(股票价格=3)的时候买入,在第5天(股票价格= 6)的时候卖出,这笔交易所能获得利润=6-3=3。

 



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵&黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值