【题解】二分答案+贪心-2

文章目录

1.准时到达的列车最小时速

题目链接:准时到达的列车最小时速

代码如下:

cpp 复制代码
class Solution {
public:
    int minSpeedOnTime(vector<int>& dist, double hour) {
        int l=1, r = 1e7, n = dist.size();
        long long hr = llround(hour*100);
        if(hr <= (n-1) * 100) return -1;
        auto check = [&](int mid)->bool{
            long long t = 0;//前n-1段的时间
            for(int i=0; i<n-1; ++i){
                t += (dist[i] + mid - 1) / mid;
            }
            t *= mid;
            t += dist[n-1];
            return (t*100 <= hr*mid);
        };

        while(l < r){
            int mid = l + (r - l) / 2;
            if(check(mid)) r = mid;
            else l = mid + 1;
        }
        return l;
    }
};

2.每个小孩最多能分到多少糖果

题目链接:每个小孩最多能分到多少糖果

代码如下:

cpp 复制代码
class Solution {
public:
    int maximumCandies(vector<int>& candies, long long k) {
        int l = 1, r = *max_element(candies.begin(), candies.end());
        int n = candies.size();
        //检查每个小孩分到i个糖果是否可以满足要求
        auto check = [&](int mid)->bool{
            long long res = 0;
            for(int i=0; i<n; ++i){
                res += candies[i] / mid;
            }
            return res >= k;
        };
        while(l <= r){
            int mid = l + (r-l)/2;
            if(check(mid)) l = mid+1;
            else r = mid-1;
        }
        return l-1;
    }
};

3.完成旅途的最少时间

题目链接:完成旅途的最少时间

代码如下:

cpp 复制代码
class Solution {
public:
    long long minimumTime(vector<int>& time, int totalTrips) {
        long long l=1;
        long long r = (long long)totalTrips*(*max_element(time.begin(), time.end()));
        int n = time.size();
        auto check = [&](long long k)->bool{
            long long res = 0;
            for(int i=0; i<n; ++i){
                res += k/time[i];
            }
            return res >= totalTrips;
        };
        while(l < r) {
            long long mid = l + (r-l) / 2;
            if(check(mid)) r = mid;
            else l = mid+1;
        }
        return l;
    }
};

4.礼盒的最大甜蜜度

题目链接:礼盒的最大甜蜜度

代码如下:

cpp 复制代码
class Solution {
public:
    int maximumTastiness(vector<int>& price, int k) {
        int n = price.size();
        sort(price.begin(), price.end());
        int l=0, r=price[n-1] - price[0];
        //检查mid的甜蜜度是否可以被满足
        auto check = [&](int mid)->bool{
            int cnt = 0, pre = INT_MIN >> 1;
            for(int p : price){
                if(p - pre >= mid){
                    cnt++;
                    pre = p;
                }
            }
            return cnt >= k;
        };
        while(l < r){
            int mid = (l+r+1)/2;
            if(check(mid)) l=mid;
            else r=mid-1;
        }
        return l;
    }
};

这两篇的二分答案和贪心都是同一类型,可以放在一起做

相关推荐
晓子文集5 小时前
Tushare接口文档:期货交易日历(fut_trade_cal)
大数据·算法
^yi6 小时前
【Linux系统编程】进程状态的理解
算法·僵尸进程·孤儿进程·进程状态·挂起状态·阻塞状态
冻柠檬飞冰走茶6 小时前
PTA基础编程题目集 7-7 12-24小时制(C语言实现)
c语言·开发语言·数据结构·算法
长不胖的路人甲7 小时前
二叉排序树(BST)Java 完整实现 + 删除思路详解
java·开发语言·算法
geovindu7 小时前
python: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·python·算法·搜索算法
长不胖的路人甲7 小时前
可达性分析法(根搜索算法)完整详解
java·jvm·算法
paeamecium7 小时前
【PAT甲级真题】- Kuchiguse (20)
数据结构·c++·python·算法·pat考试·pat
青山木7 小时前
Hot 100 --- 全排列
java·数据结构·算法·leetcode·深度优先
海兰7 小时前
【高速缓存】RedisVL 存储类型选择指南:Hash 与 JSON
人工智能·redis·算法·缓存·json·哈希算法
KaMeidebaby7 小时前
卡梅德生物技术快报|核酸适配体文库筛选:核酸适配体文库筛选全流程技术解析:NGS与AI辅助方案的设计与实践
前端·人工智能·物联网·算法·百度