HW笔试第2题

该博客主要探讨了一个Java程序,实现了一种基于排序数组的时间复杂度计算方法。通过对不同场景下的时间消耗进行分析,文章揭示了在给定时间限制下如何优化排序算法的选择。此外,还详细介绍了getTime和getTime1两个辅助方法,用于计算数组元素在特定时间内的处理情况。
package FreeTime;

import java.util.Arrays;
import java.util.Scanner;

public class HWBS2_2 {

    public static void main(String[] args) {
//        Scanner in = new Scanner(System.in);
//        int m = in.nextInt();
//        int[] nums = new int[m];
//        for (int i = 0; i < m; i++) {
//            nums[i] = in.nextInt();
//        }
        int x = 100;
        int[] nums = new int[]{5, 9, 12, 16, 19};
//        int[] nums = new int[]{40, 16, 55, 22, 66, 20, 15};
        HWBS2_2 hwbs2_2 = new HWBS2_2();
        System.out.println(hwbs2_2.getRes(nums, x));
    }

    public int getRes(int[] nums, int time) {
        Arrays.sort(nums);
        if (time == nums.length) {
            return nums[time - 1];
        }
        int r = nums.length;
        while (r > 0) {
            if (getTime(r, nums) >= time) {
                break;
            }
            r--;
        }
        if (r > 0 && getTime(r, nums) == time) {
            return nums[r - 1];
        }
        return getTime1(nums, r, time);
    }

    private int getTime1(int[] nums, int r, int time) {
        int left = r - 1 < 0 ? 1 : nums[r - 1];
        int right = nums[r];
        while (++left < right) {
            int res = r;
            int t = r;
            while (t++ < nums.length) {
                res += nums[t - 1] % left == 0 ? nums[t - 1] / left : nums[t - 1] / left + 1;
            }
            if (res == time) {
                return left;
            }
        }
        return right - 1;
    }

    private int getTime(int r, int[] nums) {
        int res = r;
        int t = nums[r - 1];
        while (r++ < nums.length) {
            res += nums[r - 1] % t == 0 ? nums[r - 1] / t : nums[r - 1] / t + 1;
        }
        return res;
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值