首页 > Java算法--亚马逊真题
头像
六年JAVA程序员
发布于 09-10 09:56 浙江
+ 关注

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

全部评论

(1) 回帖
加载中...
话题 回帖

近期热帖

近期精华帖

热门推荐