【打卡】牛客网:BM46 最小的K个数

资料:

1. 排序

sort(name.begin(),name.end()); //升序

sort(name.rbegin(),name.rend());  //降序

【C++】vector数组排序_vector排序_比奇堡咻飞兜的博客-CSDN博客

2. 把v2的部分值赋给v1

v1.assign(v2.begin(), v2.end());    //   用新元素替换vector 中的元素。

v1.swap(v2);    //   交换两个 vector 的内容。

C++ 如何将一个vector内容赋值给另一个vector?(注意:auto是内存拷贝,没法改原值;auto&是引用,才能改原值)_vector赋值给另一个vector-CSDN博客

3. priority_queue优先队列

priority_queue q; //默认降序排列,从大到小 

q.top();

// queue是取.front() 和 .end()

// priority_queue是取.top()

priority_queue优先队列的使用方法_priority_queue用法-CSDN博客

自己写的:

  1. 窗口滑动
  2. 调用排序函数(采用)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param input int整型vector 
     * @param k int整型 
     * @return int整型vector
     */
    vector GetLeastNumbers_Solution(vector& input, int k) {
        // write code here
        vector res;
        sort(input.begin(),input.end());

        if(k != 0){
            res.assign(input.begin(), input.begin()+k);
        }
        return res;
    }
};

模板的:

采用窗口滑动。窗口内的四个数是到目前为止最小的四个数。

窗口采用堆的数据结构(即优先队列,priority_queue

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param input int整型vector 
     * @param k int整型 
     * @return int整型vector
     */
    vector GetLeastNumbers_Solution(vector& input, int k) {
        // write code here
        vector res;

        if(k != 0){
            priority_queue  q;
            for(int i = 0; i < k; i++){
                q.push(input[i]);
            }

            for(int i = k; i < input.size(); i ++){
                if(input[i] < q.top()){
                    q.pop();
                    q.push(input[i]);   
                }   
            }

            for(int i = 0; i < k; i ++){
                res.push_back(q.top());
                q.pop();
            }
        }
        return res;
    }
};

你可能感兴趣的:(算法,leetcode,数据结构)