• 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;
    }
  • 相关阅读:
    实现IEnumberable接口和IEnumberator
    XAML-1
    Java基础00-Java概述1
    详解Lombok中的@Builder用法
    stream之map的用法
    stream之forEach的用法
    Java中map.getOrDefault()方法的使用
    BiPredicate的test()方法
    Function.identity()
    java 8 lamda Stream的Collectors.toMap 参数
  • 原文地址:https://www.cnblogs.com/fourmi/p/16172738.html
Copyright © 2020-2023  润新知