拼多多8.11后端笔试 个人解法分享

1. ac 看着描述复杂,实际访问顺序已经被题目定死了,按输入指定的优先级排序即可,纯模拟。整体复杂度O(n*log(n))

细节:景点第几天访问可以在O(1)时间内算出来,公式:((当前日期 - 最早日期)/ 每次延期天数)向下取整后 + 1) * 每次延期天数 + 最早日期

2. ac 优先队列,最短剩余时间优先,剩余时间相同最早布置优先。整体复杂度O(n*log(n))

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] task = new int[n][2];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 2; j++) {
                task[i][j] = in.nextInt();
            }
        }
        PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> (a[1] == b[1] ? a[0] - b[0] : a[1] - b[1]));
        long ans = 0, cur = 0;  // cur表示当前时间
        for (int i = 0; i < n - 1; i++) {
            cur = task[i][0];
            pq.offer(task[i]);
            int interval = task[i + 1][0] - task[i][0];  // 距离下一项作业被布置的时间
            while (interval > 0 && !pq.isEmpty()) {
                int[] t = pq.peek();
                if (interval >= t[1]) {
                    pq.poll();
                    cur += t[1];
                    ans += (cur - t[0]);
                    interval -= t[1];
                } else {
                    t[1] -= interval;
                    interval = 0;
                }
            }
        }
        cur = task[n - 1][0];
        pq.offer(task[n - 1]);
        while (!pq.isEmpty()) {
            int[] t = pq.poll();
            cur += t[1];
            ans += (cur - t[0]);
        }
        System.out.println(ans);
    }

3. ac 核心的两点:

① 观赏度的奇偶性永远不变,要么永远奇数,要么永远偶数

② 假设观赏度能取负数(不取绝对值),有这样一个结论:如果能取到的最大观赏度为mx,最小观赏度为mn,那么mx和mn之间的每个观赏度都能取到。严谨证明我没想过,但是从我ac了来看这个结论没问题

于是,题目转化为求最大观赏度和最小观赏度。然后就完全变成了“最大子数组和”问题。整体复杂度O(n)

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int curMaxSum = 0, curMinSum = 0;
        int maxSum = 0, minSum = 0;
        int totalSum = 0;
        for (int i = 0; i < n; i++) {
            int a = (in.nextInt() == 1 ? 1 : -1);
            totalSum += a;
            curMinSum = Math.min(curMinSum + a, a);
            minSum = Math.min(minSum, curMinSum);
            curMaxSum = Math.max(curMaxSum + a, a);
            maxSum = Math.max(maxSum, curMaxSum);
        }
        int minScore = totalSum - 2 * maxSum;
        int maxScore = totalSum - 2 * minSum;
        int ans = 0;
        if ((long) maxScore * minScore <= 0) {  // 最大最小观赏度是否同侧 分类讨论
            ans = Math.max(Math.abs(maxScore), Math.abs(minScore)) / 2 + 1;
        } else {
            ans = Math.abs(maxScore - minScore) / 2 + 1;
        }
        System.out.println(ans);
    }

4. 72%tle 转化为有向图。对于每个位置,从“线性探测时跨越的位置”到“最终位置”各连一条有向边。然后拓扑排序,排序顺序就是答案。对于字典序问题,把拓扑排序中的队列换成优先队列就行了。

但这样做最坏情况整体复杂度会达到O(n^2),所以tle了,希望ac的朋友们分享下解法

全部评论
厉害大佬
2 回复 分享
发布于 2024-08-12 17:57 江苏
厉害!
1 回复 分享
发布于 2024-08-13 09:27 黑龙江
大佬太强
1 回复 分享
发布于 2024-08-13 09:31 黑龙江
大佬,想问一下第一题的公式最后加的是当前日期么?感觉应该是加最早日期?
1 回复 分享
发布于 2024-08-13 10:49 上海
感谢大佬
1 回复 分享
发布于 2024-08-13 13:31 黑龙江
好牛!
点赞 回复 分享
发布于 2024-08-11 22:06 上海
orz
点赞 回复 分享
发布于 2024-08-12 10:09 美国
请问第三题怎么用最大子数组和求出来呀 主要是有个翻转是怎么解决的呢 佬有代码可以发下吗
点赞 回复 分享
发布于 2024-08-15 16:22 陕西
大佬太牛
点赞 回复 分享
发布于 2024-09-04 20:58 上海

相关推荐

02-05 08:18
四川大学 Java
在思考的熊熊很讨厌吃香菜:不是,我门头沟学院呢?这都没排上?
点赞 评论 收藏
分享
醒工硬件:1学校那里把xxxxx学院去了,加了学院看着就不像本校 2简历实习和项目稍微精简一下。字太多,面试官看着累 3第一个实习格式和第二个实习不一样。建议换行 4项目描述太详细了,你快把原理图贴上来了。比如可以这样描述:使用yyyy芯片,使用xx拓扑,使用pwm控制频率与占空比,进行了了mos/电感/变压器选型,实现了xx功能 建议把技术栈和你做的较为有亮点的工作归纳出来 5熟悉正反激这个是真的吗
点赞 评论 收藏
分享
评论
8
12
分享

创作者周榜

更多
正在热议
更多
# 听劝,这个简历怎么改 #
14064次浏览 182人参与
# 面试被问“你的缺点是什么?”怎么答 #
6309次浏览 98人参与
# 水滴春招 #
16215次浏览 339人参与
# 入职第四天,心情怎么样 #
11265次浏览 63人参与
# 租房找室友 #
7997次浏览 53人参与
# 读研or工作,哪个性价比更高? #
26139次浏览 356人参与
# 职场新人生存指南 #
199165次浏览 5506人参与
# 参加完秋招的机械人,还参加春招吗? #
26960次浏览 276人参与
# 文科生还参加今年的春招吗 #
4101次浏览 31人参与
# 简历无回复,你会继续海投还是优化再投? #
48608次浏览 561人参与
# 你见过最离谱的招聘要求是什么? #
144708次浏览 829人参与
# 如果重来一次你还会读研吗 #
155712次浏览 1706人参与
# 机械人选offer,最看重什么? #
69076次浏览 449人参与
# 选择和努力,哪个更重要? #
44261次浏览 492人参与
# 如果再来一次,你还会学硬件吗 #
103638次浏览 1245人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
20517次浏览 413人参与
# 招聘要求与实际实习内容不符怎么办 #
46662次浏览 494人参与
# 22届毕业,是读研还是拿外包offer先苟着 #
4652次浏览 27人参与
# 你们的毕业论文什么进度了 #
901179次浏览 8960人参与
# 软开人,你觉得应届生多少薪资才算合理? #
81368次浏览 496人参与
# 国企还是互联网,你怎么选? #
109188次浏览 853人参与
牛客网
牛客企业服务