当前位置:首页 > NOIP > 正文

leecode-870. 优势洗牌

给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。

返回 A 的任意排列,使其相对于 B 的优势最大化。

class Solution {
public:
   vector<int> advantageCount(vector<int>& A, vector<int>& B) {
       /*
        贪心法,对B中的每一个元素,找A中大于它的最小的那个元素,如果没有比B大的,则用A中最小的代替
       */
        sort(A.begin(),A.end());
        vector<int> ans;
        int flag[10010];
        memset(flag,0,sizeof(flag));
        int lenA=A.size();
        int lenB=B.size();
        int i=0,j=0;
        while(i<lenB){
            j=0;
            while(j<lenA){
                if(A[j]>B[i]&&flag[j]==0){
                    ans.push_back(A[j]);
                    flag[j]=1;
                    break;
                }
                j++;
            }
            
/*如果没找到比B[i]大的就用把A最小的放到这里,这样能保证后面在遇到B[i]可以放入较大的A[j]*/
            if(j>=lenA){
                for(int i=0;i<=lenA;i++){
                    if(flag[i]==0){
                        ans.push_back(A[i]);
                        flag[i]=1;
                        break;
                    }
                }
                
            }
            i++;
        }
        return ans;
    }
};


更新时间 2019-03-22

有话要说...