京东笔试第三题怎么做

我把我的代码贴上来了,不知道怎么做的地方写了TODO,希望有大佬可以指点一下,谢谢!祝大家秋招都顺利!

引流一下:百度 阿里 腾讯 字节跳动 小红书

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int n = in.nextInt();

        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = in.nextInt();
        }

        // 最小的两个数之和大于最大的数

        Deque maxNum = new LinkedList<>(); // 存区间最大值
        Deque; minNum = new LinkedList<>(); // 存区间最小值

        int left = 0; // 初始化左端点

        int[] maxrange = new int[2];  // 存最大区间的左右两个端点
        maxrange[0] = 0; // 左端点初始为 0
        maxrange[1] = 1; // 右端点初始为 1
        int maxlen = 2; // 最大区间的长度

        for (int right = 0; right < n; right++) {
            while (!maxNum.isEmpty() && nums[maxNum.getFirst()] < nums[right]) {
                maxNum.removeFirst();
            }
            maxNum.addLast(right);

            while (!minNum.isEmpty() && nums[right] < nums[minNum.getFirst()]) {
                minNum.removeFirst();
            }
            minNum.addLast(right);

            if (right - left > 1) { // 如果区间长度大于 2,判断最小值加第二小值是否大于最大值
                // 如果最小值加第二小值大于最大值, flag = true;
                // 反之,flag = false;
                // TODO: 怎么存第二小值从而判断 flag?
                boolean flag = true;

                if (flag) { // 如果满足三角形要求,判断区间长度是否变长
                    if (right - left + 1 > maxlen) {
                        maxlen = right - left + 1;
                        maxrange[0] = left;
                        maxrange[1] = right;
                    }
                } else { // TODO: 如果不满足三角形要求,怎么做?
                    while (right - left > 1) {
                        left++;
                        while (!maxNum.isEmpty() && maxNum.getFirst() < left) maxNum.removeFirst();
                        while (!minNum.isEmpty() && minNum.getFirst() < left) minNum.removeFirst();
                    }
                }
            }
        }

        System.out.println(maxrange[0] + 1 + " " + (maxrange[1] + 1));
    }
全部评论
滑动窗口+优先队列做
点赞 回复 分享
发布于 2024-08-24 19:19 北京

相关推荐

多多啊 多多啊 上来四道算法题算法题直播排序,整体比较简单把对象写出来,然后比较规则写明白就OK了。唯一一道A100%的电车充电如何最省钱,到目的地如何充电的钱最少,路上有充电站,每个电站价格不一样。用了DP来做,但感觉是贪心的样子,最后没招了,把不能到的情况给干了出来,过了8%日志分析纠错,滑动窗口,但我最后结果永远少一,过了15%没看,力竭了燃尽了多多 以后牛客不用后台找我了,笔试夯爆了
淮竹c:不好意思,打扰大家🙏我是一个拼多多骑手,小电驴的最大电量为C,我的最大电量有1e9这么promax😭😭😭需要从x=0处走到x=L,L足足有1e9那么长处,途中有n个充电站,🙏🙏每个充电站的距离和电价分别为di和pi,初始电量是满的😭😭😭请告诉我到达终点最少要花多少钱😭😭😭求求大家把这些钱转给我
查看2道真题和解析
点赞 评论 收藏
分享
03-08 18:11
门头沟学院 Java
想要实习的牛:这么牛逼的简历都吃瘪吗🌚那我不寄了
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务