当前位置: 首页 > article >正文

贪心算法习题其二【力扣】【算法学习day.18】

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.分发糖果

题目链接:135. 分发糖果 - 力扣(LeetCode)

题面:

基本分析: 从左往右遍历,需要满足高分比低分多,从右往左遍历,同样也需要,遍历两次取最大值

代码:

class Solution {
    public int candy(int[] ratings) {
        int n = ratings.length;
        int[] left = new int[n];
        int[] right = new int[n];
        Arrays.fill(left,1);
        Arrays.fill(right,1);
        for(int i =1;i<n;i++){
            if(ratings[i]>ratings[i-1]){
                left[i]=left[i-1]+1;
            }
        }
        int sum = left[n-1];
         for(int i =n-2;i>=0;i--){
            if(ratings[i]>ratings[i+1]){
                right[i]=right[i+1]+1;
            }
            sum+=Math.max(left[i],right[i]);
        }
        
        return sum;
    }
}

2.柠檬水找零

题目链接:860. 柠檬水找零 - 力扣(LeetCode)

题面:

基本分析:优先使用掉大面值的钱

代码:

class Solution {
    public boolean lemonadeChange(int[] bills) {
        int n = bills.length;
        int[] arr = new int[11];
       for(int c:bills){
        if(c==5){
                arr[5]++;
            }
            else if(c==10){
                if(arr[5]==0)return false;
                arr[5]--;
                arr[10]++;
            }
            else{
                if(arr[10]>0){
                    arr[10]--;
                    if(arr[5]==0)return false;
                    arr[5]--;
                }else{
                    if(arr[5]<3)return false;
                    arr[5]-=3;
                }
            }
       }
         return true;
    }
}

3.根据身高重建队列

题目链接:406. 根据身高重建队列 - 力扣(LeetCode)

题面:

基本分析:先排高的,矮的进行插队

代码:

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        int n = people.length;
        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];
            }
        });
        LinkedList<int[]> list = new LinkedList<>();
        for (int[] i : people) {
            list.add(i[1], i);
        }

        return list.toArray(new int[list.size()][2]);
    }
}

后言

上面是贪心算法的部分习题,下一篇会讲解贪心算法的其他相关力扣习题,希望有所帮助,一同进步,共勉!   


http://www.kler.cn/a/379268.html

相关文章:

  • TecoPytorch
  • 使用 MONAI Deploy 在 AMD GPU 上进行全身分割
  • Linux/Unix awk命令
  • 二、应用层,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》
  • 深入学习 Scrapy 框架:从入门到精通的全面指南
  • utf-8、pbkdf2_sha
  • dns服务部署 作业
  • Docker:网络 Network
  • 探索Python编程:从入门到实践的全面指南
  • 海康威视监控rtsp播放
  • ubantu lnmp
  • 【Android】Activity组件通信
  • 002-Kotlin界面开发之Kotlin旋风之旅
  • Jmeter5.X性能测试
  • 【机器学习】 16. 降维:PCA-主成分分析 Principle Component Analysis
  • Docker部署Portainer CE结合内网穿透实现容器的可视化管理与远程访问
  • Docker配置国内源加速
  • chrome 安装vuejs
  • CocoaPods安装步骤详解 - 2024
  • 封装ES高亮Yxh-Es
  • auxm 注册多个router参数时报错
  • Python数据分析NumPy和pandas(二十、数据清洗和预处理之二:数据转换)
  • 开源模型应用落地-glm模型小试-glm-4-9b-chat-快速体验(一)
  • SpringBoot核心知识点
  • 初识动态规划(由浅入深)
  • Spring Boot 应用开发指南