Java算法--亚马逊真题

第一道题

给定一个数组arr,含有n个数字,都是非负数

给定一个正数k

返回所有子序列中,累加和最小的前k个子序列累加和

假设K不大,怎么算最快?

    //子序列可以不连续
    public static int[] process(int[] array, int k) {
        Arrays.sort(array);
        PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[1] - o2[1];
            }
        });
        int[] result = new int[k];

        queue.add(new int[] {0, array[0]});

        for(int i = 1; i < k; i ++) {
            int[] cur = queue.poll();

            int curVal = cur[1];
            int curIndex = cur[0];
            result[i] = curVal;
            if(curIndex + 1 < array.length) {
                queue.add(new int[] {curIndex + 1, curVal - array[curIndex] + array[curIndex + 1]});
                queue.add(new int[] {curIndex + 1, curVal + array[curIndex + 1]});
            }
        }
        return result;
    }

第二道题

给定一个数组arr,含有n个

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

八股文+场景题+算法真题 文章被收录于专栏

Java全新整理八股文 + 场景题 + 算法 精心设计,面试命中率超过80% 专栏优势: 1、问题和答案已经整理到位,答案更专业,可以直接回答,不需要额外总结! 2、场景题讲解清晰,适用于大部分场景的项目,并且持续更新中 3、分享学习心得【知识点的广度和深度,算法有哪些坑,如何准备面试等等】

全部评论
可是直接sort不就有可能不是子序列了吗?
点赞 回复 分享
发布于 09-11 01:03 山东

相关推荐

11-05 18:34
门头沟学院 Java
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务