C++ pair用法

來源:互聯網
上載者:User

標籤:make   用法   結果   solution   count   mat   color   amp   優勢   

刷leecode有這麼一道題:

給定兩個大小相等的數組 A 和 B,A 相對於 B 的優勢可以用滿足 A[i] > B[i] 的索引 i 的數目來描述。

返回 A 的任意排列,使其相對於 B 的優勢最大化。

我第一次想的是枚舉法,然後逾時了。

class Solution {public:    vector<int> advantageCount(vector<int>& A, vector<int>& B) {        int max = 0;        vector<int> maxVector;        maxVector.insert(maxVector.begin(), A.begin(), A.end());        sort(A.begin(), A.end());        do        {            int count = 0;            for(int i = 0; i < A.size(); i ++)            {                if(A[i] > B[i] ) count++;            }            if(count > max)            {                max = count;                maxVector.clear();                maxVector.insert(maxVector.begin(), A.begin(), A.end());                        }        } while(next_permutation(A.begin(), A.end()));        return maxVector;    }};

 後來想了想。換了一種方法做。通過用例了。

1.首先兩個數組進行排序,如果數組A[i] > B[j];,用pair儲存B數組未排序的索引 可以認為B[j]之前的索引數組都是小於等於A[i].

2. 則對數組A遍曆,找到滿足A[i]>B[j]的值,取代結果數組B中原先索引值。

代碼如下:

class Solution {public:    vector<int> advantageCount(vector<int>& A, vector<int>& B) {        vector<pair<int, int> > b_matrix;        vector<int> result;  //儲存結果索引值        result.resize(B.size());        int flag = -1;        for(int i = 0; i < B.size(); i++)        {            b_matrix.push_back(make_pair(B[i],i));        }        sort(A.begin(), A.end());        sort(b_matrix.begin(), b_matrix.end());        int j = A.size()-1;        int k = A.size()-1;        int i = 0;        while(j>=0)        {            if(A[k] > b_matrix[j].first) {                result[b_matrix[j].second] = A[k];                k--;                j--;            } else {                result[b_matrix[j].second] = A[i];                i++;                j--;            }                    }                 return result;    }};/*********example ******A[k]:          1 2  2 4 6b_matrix[j]:0 2 2 4 56取代5原先的索引,  4取代2原先的索引,2取代0原來的索引值。其他位置則隨意****************/

 

C++ pair用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.