贪心算法(分发饼干、无重叠区间、买卖股票的最佳时机)

贪心算法

需求

记录并学习贪心策略

算法理解

贪心算法(Greedy Algorithm)之所以有效,是因为它在每个步骤都做出当前看来最优的选择,而不考虑之后的结果。这种“局部最优选择”的策略通常可以在某些问题中找到全局最优解或接近最优解,尽管这并非对所有问题都适用。
即【局部最优解】=>【全局最优解】

例子

455.分发饼干

贪心算法(分发饼干、无重叠区间、买卖股票的最佳时机)_第1张图片

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        //贪心策略
        int i=0;
        int j=0;
        Arrays.sort(g);
        Arrays.sort(s);
        int count=0;
        while(i

435.无重叠区间

贪心算法(分发饼干、无重叠区间、买卖股票的最佳时机)_第2张图片

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        //贪心策略
        //1.排序
        Arrays.sort(intervals,new Comparator(){
            @Override
            public int compare(int[] a,int[] b){
                return a[1]-b[1];
            }
        });
        int count=1;
        int first=intervals[0][1];
        for(int i=1;i=first){
                count++;
                first=intervals[i][1];
            }
        }
        System.out.println(count);
        return intervals.length-count;
    }
}

122.买卖股票的最佳时机 II

贪心算法(分发饼干、无重叠区间、买卖股票的最佳时机)_第3张图片

class Solution {
    public int maxProfit(int[] prices) {
        //贪心策略
        int profit=0;
        for(int i=0;i

思考

  • 贪心问题需要问题的解决方案只依赖于当前的决策,而不受之前或之后的决策影响。

  • 最短路径问题:例如Dijkstra算法,它寻找图中两个节点之间的最短路径。

  • 最小生成树问题:例如Prim算法和Kruskal算法,用于寻找连接图中所有节点的最小生成树。

  • 背包问题:在限定容量的情况下,选择一组物品以最大化它们的总价值。

  • 调度问题:例如任务调度,选择最优的顺序来执行任务以最小化总执行时间或成本。

  • 活动选择问题:在一组互相冲突的活动中,选择最大数量的活动以使它们不相互冲突。

  • 霍夫曼编码:用于数据压缩,通过构建一棵最优的霍夫曼树来编码数据。

你可能感兴趣的:(JAVA,LeetCode,贪心算法)