leetcode(c++)topK

#include <iostream>
#include <queue>
#include <vector>
#include <unordered_map>

using namespace std;

bool cmp(const pair<int,int>&p1,const pair<int,int>&p2)
{
    return p2.second - p1.second;
}

vector<int> topKFrequent(vector<int>& nums, int k) {
    unordered_map<int,int>map;
    vector<int>res{};
    for(int i = 0; i < nums.size(); ++i)
    {
        ++map[nums[i]];
    }
    vector<pair<int,int>>v;
    for(auto m:map)
    {
        v.emplace_back(m);
    }
    sort(v.begin(),v.end(),cmp);
    for(int i = 0; i < k ; ++i)
    {
        res.emplace_back(v[i].first);
    }
    return res;

}

void print(const vector<int>& v)
{
    for(int num : v)
    {
        cout << num << " ";
    }
    cout << endl;
}

vector<int>sortColor(const vector<int>&corlors)
{
    unordered_map<int,int>map;
    vector<int>res{};
    int zero = 0, one = 0 ,two = 0;
    for(int i = 0; i < corlors.size(); ++i)
    {
        if(0 == corlors[i])++zero;
        if(1 == corlors[i])++one;
        if(2 == corlors[i])++two;

    }
    cout << zero << " " << one << " " << two << endl;
    int i = 0;
    while(i < zero)
    {
        res.emplace_back(0);
        ++i;
    }
    for(int i = zero; i < zero + one; ++i)
    {

        res.emplace_back(1);
    }
    for(int i = zero+one;i < corlors.size(); ++i)
    {
        res.emplace_back(2);
    }
    return res;
}


int partition(vector<int>& a, int l, int r) {
        int x = a[r], i = l - 1;
        for (int j = l; j < r; ++j) {
            if (a[j] <= x) {
                swap(a[++i], a[j]);
            }
        }
        swap(a[i + 1], a[r]);
        return i + 1;
    }

int randomPartition(vector<int>& a, int l, int r) {
        int i = rand() % (r - l + 1) + l;
        swap(a[i], a[r]);
        return partition(a, l, r);
}

int quickSelect(vector<int>& a, int l, int r, int index) {
        int q = randomPartition(a, l, r);
        if (q == index) {
            return a[q];
        } else {
            return q < index ? quickSelect(a, q + 1, r, index) : quickSelect(a, l, q - 1, index);
        }
}

int findKthLargest(vector<int>& nums, int k) {
        srand(time(0));
        return quickSelect(nums, 0, nums.size() - 1, nums.size() - k);
}

int main()
{

    vector<int>input{1,1,1,2,2,3};
    //LeetCode347
    auto res = topKFrequent(input,2);
    print(res);

    //LeetCode75
    vector<int>input1{0,0,0,2,1,1};
    auto res0 = sortColor(input1);
    print(res0);

    //LeetCode215
    vector<int>input2{1,3,4,5,6};
    cout << findKthLargest(input2,2) << endl;

    return 0;
}

 

posted @ 2022-04-21 09:14  fourmii  阅读(28)  评论(0编辑  收藏  举报