08.14 大疆笔试 后端开发工程师(研发部)B卷 编程题

题目与 LC 1235. 规划兼职工作相同,但是需要输出最优任务的下标。
在原题的代码基础上加入路径记录就行了。DP+二分+记录路径:

class Solution {
    static class Job implements Comparable<Job> {
        int l, r, w;
        int idx;
        Job(int l, int r, int w, int idx) {
            this.l = l;
            this.r = r;
            this.w = w;
            this.idx = idx;
        }
        @Override
        public int compareTo(Job obj) {
            return Integer.compare(r, obj.r);
        }
    }
    public int jobScheduling(int[] sts, int[] eds, int[] w) {
            int n = sts.length;
            Job[] arr = new Job[n];
            for (int i=0; i<n; ++i) {
                arr[i] = new Job(sts[i], eds[i], w[i], i);
            }
            Arrays.sort(arr);

            int[] dp = new int[n+1];
            int[] states = new int[n+1];
            for (int i=1; i<=n; ++i) {
                dp[i] = dp[i-1];

                int l = -1, r = i-2;
                while (l < r) {
                    int mi = l + (r - l + 1) / 2;
                    if (arr[mi].r <= arr[i-1].l) l = mi;
                    else r = mi - 1;
                }
                // dp[i] = Math.max(dp[i], dp[l + 1] + arr[i-1].w);
                int t = dp[l + 1] + arr[i-1].w;
                if (t > dp[i]) {
                    // 选
                    dp[i] = t;
                    states[i] = l + 1;
                } else {
                    // 不选,用负数标记
                    states[i] = i - 1 - n;
                }
            }
            // 路径
            ArrayDeque<Integer> ret = new ArrayDeque<>();
            int i = n;
            while (i != 0) {
                int t = states[i];
                if (t < 0) {
                    // 不选
                    t += n;
                } else {
                    // 选
                    ret.offerFirst(arr[i-1].idx);
                }
                i = t;
            }

            System.out.println(ret);

            return dp[n];
    }
}


全部评论
hard~
点赞 回复
分享
发布于 2022-08-15 09:52

相关推荐

点赞 10 评论
分享
牛客网
牛客企业服务