本文主要是介绍优势洗牌,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
解题思路:先对数组A排序, 对于B中的每一个元素i,在A中遍历,找到最小的大于B[j]的元素,如果找不到,就用
A中最小的未使用的元素来对应。(有点像田忌赛马)
public int[] advantageCount(int[] A, int[] B) {// 按照元素大小对A排序Arrays.sort(A);// 判断A中某个位置的元素是否使用过boolean[] used = new boolean[A.length]; int[] ret = new int[A.length];int j = 0, c = 0, k = 0;for (int i=0; i<B.length; i++){for (j=0; j<A.length; j++){// 找出满足A[i] > B[i]的索引iif (A[j] <= B[i] || used[j])continue;elsebreak;}// 找到第一个大于B[i]的元素if (j < A.length){ret[c++] = A[j];used[j] = true; // 表示该位置元素已被使用}else{// 找A中的最小元素来怼较大的B[i]元素for (k=0; k<A.length; k++){if (!used[k]) // 没有被使用break;}ret[c++] = A[k];used[k] = true; }}return ret;}
这篇关于优势洗牌的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!