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

分组(二分查找)

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int n,k;

bool f(int x){
  int num=1;
  int m=a[1];
  for(int i=2;i<=n;i++){
    if(a[i]-m>x){ // 当前元素加入当前组会超过极差 x
      num++;        // 新开一组
      m=a[i];        // 新组的最小值设为当前元素
    }
  }
  return num<=k;
}

int main()
{
  cin>>n>>k;
  for(int i=1;i<=n;i++){
    cin>>a[i];
  }
  sort(a+1,a+n+1);
  int l=0,r=a[n]-a[1];
  while(l<=r){
    int mid=l+(r-l)/2;
    if(f(mid)){
      r=mid-1;
    } else l=mid+1;
  }
  cout<<l;
  return 0;
}

 

检查函数 f(int x)

判断以最大极差 x 是否能将 n 个元素分成不超过 k 组。

初始化:

l = 0:极差最小可能为 0(每组一人时)

r = a[n] - a[1]:极差最大为整个数组的最大值减最小值。

mid = l + (r - l) / 2:计算中间值

if (f(mid))     如果 mid 可行(组数 ≤ k),说明极差可以更小,更新 r = mid - 1。

否则,极差太小,更新 l = mid + 1。

循环结束,此时 l 是最小的可行极差。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/115116.html

相关文章:

  • GORM-Golang的ORM框架(1)
  • 2000-2019年 全国各省份GDP、人口、城镇化率统计数据
  • 深度研究deep-research优秀开源
  • Windows环境下开发pyspark程序
  • Flask + Pear Admin Layui 快速开发管理后台
  • 隐式类型转换
  • Hyperlane 框架路由功能详解:静态与动态路由全掌握
  • 无锁队列简介与实现示例
  • # 基于人脸关键点的多表情实时检测系统
  • 4月7号.
  • 【开源宝藏】30天学会CSS - DAY12 第十二课 从左向右填充的文字标题动画
  • spring-cloud-alibaba-nacos-discovery使用说明
  • 超大规模数据场景(思路)——面试高频算法题目
  • 进程和线程的区别和联系
  • 【Java面试系列】Spring Boot应用中的事务传播机制与分布式事务实践详解 - 3-5年Java开发必备知识
  • 【软件】在 macOS 上安装和配置 Apache HTTP 服务器
  • React-narice安卓打包流程
  • ifconfig 使用详解
  • animals_classification动物分类
  • 子类是否能继承
  • 解决windows下删除文件提示该项目不存在
  • 设计模式简述(七)原型模式
  • Qt音频采集:QAudioInput详解与示例
  • Android打包及上架应用市场问题处理
  • vue-axios跨域问题
  • 利用CNN卷积神经网络进行声呐图像分类
  • STM32常用外设寄存器介绍
  • golang并发原语groutine channel select sync包
  • vue2打包部署到nginx,解决路由history模式下页面空白问题
  • C++ —— 文件操作(流式操作)