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

二分题目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;
    }
}

相关文章:

  • not support ClassForName
  • SQL语句初学
  • 网络原理--HTTP协议
  • LeeCode题库第四十三题
  • JSON格式化工具
  • com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别
  • QwenVL 2.5-本地安装编译布署全教程
  • element-ui statistic 组件源码分享
  • 人机交互革命:从触屏到脑波的13维战争
  • 说一下redis事务底层原理
  • 【Vue CLI脚手架开发】——3.组件交互props配置
  • ANI AGI ASI的区别
  • 现在创业的风口有哪些?
  • 蓝桥杯备考:动态规划线性dp之传球游戏
  • Windows命令行的注释方式, powershell的注释 和 cmd的注释 笔记250303
  • 初识FPGA
  • 【前端跨域】CORS:跨域资源共享的机制与实现
  • python力扣3:无重复字符的最长子串
  • 通往 AI 之路:Python 机器学习入门-线性代数
  • ThreadLocal解析
  • 如何用eclipse做网站/网站建设苏州
  • 网站平台搭建要多少/企业推广软件
  • 用自己头像做的圣诞视频网站/下拉关键词排名
  • vs如何做网站/官方app下载安装
  • 保山网站建设哪家好/网站黄页推广软件
  • 怎样申请一个免费的网站空间/深圳经济最新新闻