hnust_fujiacheng level
获赞
19
粉丝
2
关注
5
看过 TA
15
湖南科技大学
2022
Java
IP属地:湖南
暂未填写个人简介
私信
关注
2021-09-09 22:20
已编辑
湖南科技大学 Java
三个编程题 1. linux命令 2. 一组数划分为k个区间 3. 01字符串 消去1 public class test10 { //第一题     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         int n = Integer.parseInt(sc.nextLine());         String[] ops = new String[n];         for(int i=0; i < n; i++){  ...
DrBurry:个人注解: /*主函数*/{ // 首先找出整个数组中的两个最值 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; }
投递携程等公司10个岗位 >
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务