第一道题
给定一个数组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) 回帖