• C++ pair用法


    刷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 6
    b_matrix[j]:0 2 2 4 5
    6取代5原先的索引,  
    4取代2原先的索引,
    2取代0原来的索引值。
    其他位置则随意
    ****************/
    The Safest Way to Get what you Want is to Try and Deserve What you Want.
  • 相关阅读:
    allocation size overflow
    数据库隔离级别深入理解(ORACLE)
    查看Orcale数据里的表是否有变化
    意外发现抽象类的构造器
    C语言学习快速笔记
    由javascript的闭包引申到程序语言编译上的自由变量作用域的考量
    easyui的datagrid的列checkbox自定义增加disabled选项
    数据库连接不关闭造成的问题以及RowSet的使用
    Quartz的JobDetail没有触发器指向时会被删除的问题
    发现浏览器开发工具的一个小问题
  • 原文地址:https://www.cnblogs.com/Shinered/p/9313954.html
Copyright © 2020-2023  润新知