关注
个人注解:
/*主函数*/{
// 首先找出整个数组中的两个最值
for(int num : nums){
max = Math.max(max, num);
min = Math.min(min, num);
}
// 这里是采用了二分的思路,因为段的不平衡度是非严格递增的(重点),也就是有序的,故可以使用二分法
// left为0,即平衡度的最小值;right为max-min,即段为整个数组时的平衡度,此时拆分后的段的平衡度不可能超过这个值
int l = 0, r = max - min, m = 0;
while(l < r){
m = (l + r) / 2;
// 检查平衡度小于等于m的段是否存在,若存在,我们缩小右边界,看看是否存在更小的平衡度
if(check(nums, k, m)) r = m;
// 若不存在,说明需要往大于m的方向寻找
else l = m + 1;
}
// 因为left是从0开始的,而且每次只递增1,那么最后跳出时就是我们所求的结果
System.out.println(l);
}
// 是否存在满足平衡度<=x的最长的段
boolean check(int[] nums, int k, int x){
int max = nums[0], min = nums[0];
for(int i=1; i < nums.length; i++){
max = Math.max(max, nums[i]);
min = Math.min(min, nums[i]);
// 当平衡度大于x时,开启下一个段,看是否存在更小的平衡度。直到达到段数的限制,则返回false
if(max - min > x){
k--;
if(k <= 0) return false;
max = min = nums[i];
}
}
return k > 0;
}
查看原帖
5 3
相关推荐
牛客热帖
更多
正在热议
更多
# 如果秋招能重来,我会____ #
11667次浏览 104人参与
# 苦尽甘来时,再讲来时路 #
11741次浏览 188人参与
# “vivo”个offer #
20303次浏览 154人参与
# 如果上班像打游戏,你最想解锁什么技能 #
2722次浏览 33人参与
# 我是面试官,请用一句话让我破防 #
2388次浏览 20人参与
# 为了实习逃课值吗? #
12655次浏览 103人参与
# 快手技术岗信息交流阵地 #
12621次浏览 74人参与
# 校招生月薪1W算什么水平 #
3344次浏览 24人参与
# 机械求职避坑tips #
71538次浏览 485人参与
# 一份好的简历长什么样? #
7245次浏览 179人参与
# 选完offer后,你后悔学机械吗? #
43195次浏览 249人参与
# 秋招许愿,本周能____ #
14817次浏览 96人参与
# 选择和努力,哪个更重要? #
135543次浏览 1039人参与
# 班味很重的人是啥样的? #
4541次浏览 30人参与
# 应届生第一份工资要多少合适 #
3757次浏览 36人参与
# 投递无反馈,如何优化求职策略? #
2562次浏览 27人参与
# 材料专业可以靠半导体脱坑吗? #
27018次浏览 138人参与
# 机械制造秋招总结 #
82710次浏览 818人参与
# 大学最后一个寒假,我想…… #
60867次浏览 655人参与
# 职场新人体验 #
121456次浏览 830人参与
# 你觉得实习能学到东西吗 #
114746次浏览 1248人参与
# 新凯来求职进展汇总 #
58181次浏览 150人参与

查看13道真题和解析