首页 > 编程语言 >代码随想录第三十五天 | 贪心算法

代码随想录第三十五天 | 贪心算法

时间:2022-11-16 13:46:30浏览次数:65  
标签:第三十五 return int 随想录 else points five o2 贪心

 第三十五天,继续贪心  

860.柠檬水找零 

class Solution {
    public boolean lemonadeChange(int[] bills) {
        int n = bills.length;
        if(bills[0] > 5){
            return false;
        }
        int five = 0;
        int ten = 0;
        int twenty = 0;
        for(int i = 0; i<n; i++){
            if(bills[i] == 5){
                five += 1;
            }
            else if(bills[i] == 10){
                if(five>0){
                    five --;
                    ten ++;
                }
                else{
                    return false;
                }

            }
            else{
                if(ten > 0 && five >0){
                    five --;
                    ten --;
                }
                else if(five > 2){
                    five -= 3;
                }
                else{
                    return false;
                }
            }
        }
        return true;
    }
}

有5就加上;有10就看有没有5,再加上10;有20就看有没有足够的5和10,不用管20;

406.根据身高重建队列 

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        int n = people.length;
        LinkedList<int[]> queue = new LinkedList<>();
        Arrays.sort(people, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if (o1[0]==o2[0]) {
                    return o1[1]-o2[1];
                }
                return o2[0] - o1[0];
            }
        }); 

        queue.add(people[0]);
        for(int i = 1; i<n; i++){
            queue.add(people[i][1],people[i]);
        }
        

        return queue.toArray(new int[n][]);

    }
}

先由高到低排序好,如果是一样的身高,那就根据数组的第二个格子由低到高排列,排列后再依次插队到res里

452. 用最少数量的箭引爆气球 

 

class Solution {
    public int findMinArrowShots(int[][] points) {
        int n = points.length;
        Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));
        int res = 1;
        for(int i = 1; i<n; i++){
            if(Integer.compare(points[i][0], points[i-1][1])>0){
                res ++;
            }
            else{
                points[i][1] = Math.min(points[i][1], points[i-1][1]);
            }
        }
        return res;
    }
}

这道题就看当前的气球和另一个气球是否有重合,如果有的话,就缩短两个气球的最大边界值为同样短,这样就可以判断当前之后的气球是否可以连当前之前的一起射穿,没有的话就再射出一根箭。

标签:第三十五,return,int,随想录,else,points,five,o2,贪心
From: https://www.cnblogs.com/catSoda/p/16895597.html

相关文章

  • javascript-代码随想录训练营day1
    704.二分查找力扣题目链接:https://leetcode.cn/problems/binary-search/题目描述:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums......
  • 代码随想录Day24
    LeetCode257二叉树的所有路径给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。示例:思路:终止逻辑:走到叶子节点,所以原本终止......
  • 20221115_T3A+_贪心二分
    题意你在和Yazid做游戏。Yazid给了你一棵\(n\)个节点的树,并让你删除这棵树上的恰好\(k\)条边,使得整棵树被分成\(k+1\)个连通块。你觉得太简单了,随便删k条边......
  • 代码随想录第三十四天|贪心算法
    今天继续贪心算法,重点是学习贪心算法的思维 1005.K次取反后最大化的数组和 classSolution{publicintlargestSumAfterKNegations(int[]nums,intk){......
  • 1710. 卡车上的最大单元数 ----- 贪心算法,自定义sort排序
    请你将一些箱子装在一辆卡车上。给你一个二维数组boxTypes,其中boxTypes[i]=[numberOfBoxesi,numberOfUnitsPerBoxi]:numberOfBoxesi是类型i的箱子的数量。numb......
  • 代码随想录Day23
    LeetCode110.平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。......
  • 20221114_T4B_拓扑排序贪心
    题意L国正在举行各种会议,但是可怜的是L国只有一个主持人,每场会议的开始主持人都必须去主持会议,使会议得以开始,在会议开始后主持人可以离开。 主持人不会分身,他在一个时刻......
  • 代码随想录训练营第三十二天|贪心算法
    本来这是第三十一天的内容,但是三十一天的时候写成第三十二天的了,因此今天写第三十一天的内容 455.分发饼干 classSolution{publicintfindContentChildre......
  • 代码随想录算法训练营第十五天| 二叉树的层序遍历
    二叉树的层序遍历:https://leetcode.cn/problems/binary-tree-level-order-traversal/层序遍历使用队列实现:用size记录当前层的个数,size--控制弹出元素的个数,保证当前层的......
  • 20221113_T2A_背包贪心
    题意Steve的城堡正在被大量的怪物袭击。共有\(n\)个怪物正在袭击城堡,第\(i\)个怪物的攻击力为\(a_i\),防御力为\(b_i\)。城内有\(m\)个怪物猎人,第\(j\)个怪物......