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

二分题目leetcode

二分题目

  • 爱吃香蕉的珂珂
  • 在D天内送达包裹的能力
  • 分割数组的最大值

总结来说,如果发现题目中存在单调关系,就可以尝试使用二分搜索的思路来解决。

爱吃香蕉的珂珂

题目链接在这里插入图片描述

class Solution {
    public int minEatingSpeed(int[] piles, int h) {
        int maxBound=0;
        int sz=piles.length;
        for(int i=0;i<sz;i++){
            maxBound=Math.max(maxBound,piles[i]);
        }
        int left=1,right=maxBound;
        while(left<right){
            int mid=(left+right)/2;
            if(needTimes(mid,piles)<=h){
                right=mid;
            }else{
                left=mid+1;
            }
        }
        return left;
    }
    //以速度 k 根/小时,返回吃完所有香蕉需要的时间
    int needTimes(int k,int[]piles){
         int sz=piles.length;
         int times=0;
         for(int i=0;i<sz;i++){
            if(piles[i]<=k){//一个小时之内吃完
                times++;
            }else{
                int divi=piles[i]/k;
                if(piles[i]%k==0){
                     times+=divi;
                }else{
                    times+=(divi+1);
                }
            }
          
         }
         return times;
    }
}

在D天内送达包裹的能力

题目链接在这里插入图片描述

分割数组的最大值

题目链接在这里插入图片描述

class Solution {
    //这么想,nums是包裹,k为船的数量,目的是运完所以货,让你求船的最小运载能力
    public int splitArray(int[] nums, int k) {
        int maxVal=0;
        int sum=0;
        int sz=nums.length;
        for(int i=0;i<sz;i++){
            sum+=nums[i];
            maxVal=Math.max(maxVal,nums[i]);
        }
        int left=maxVal,right=sum;
        while(left<right){
            int mid=(left+right)/2;
            if(needK(mid,nums)<=k){
                right=mid;
            }else{
                left=mid+1;
            }
        }
        return left;
    }
    //返回需要 几个船 可以运完货
    int needK(int maxCapacity,int[]nums){
        int sz=nums.length;
        int left=0,right=0;
        int windowSum=0;
        int ships=0;
        while(right<sz){
            //扩大窗口
            windowSum+=nums[right++];
            //检查什么时候停止上货
            if(right<sz && windowSum+nums[right]>maxCapacity){
                //如果加上下一个包裹就超载了,停止上货
                ships++;
                windowSum=0;
                left=right;
            }
        }
        ships++;
        return ships;
    }
}

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

相关文章:

  • 二百八十五、华为云PostgreSQL——建分区表并设置主键
  • 10.LED点阵实验
  • 安卓内存泄露之DMA-BUF异常增长:Android Studio镜像引起DMA内存泄露
  • Google chrome拦截某些下载内容
  • 基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码
  • 软件架构设计7大原则
  • ESP32之Flash操作
  • 11、HTTPS和HTTP有哪些区别【高频】
  • SSM开发(十四) Spring之IOC
  • 大模型——CogView4:生成中英双语高清图片的开源文生图模型综合介绍
  • DeepSeek vs Grok vs ChatGPT:大模型三强争霸,谁将引领AI未来?
  • Web⾃动化测试及常用函数
  • pnpm+monorepo实现前端公共函数、组件库
  • 芯麦 GC1272 芯片:电脑散热风扇领域的高效替代之选,对比 APX9172/茂达芯片优势解析
  • Linux基础 -- ARM 32位常用机器码(指令)整理
  • Deepseek的底层架构思维构成
  • 面试-----每日一题
  • android13打基础: 接收自定义广播并在接收到广播时触发设备震动
  • 3月4日C高级
  • 通往 AI 之路:Python 机器学习入门-线性代数