首页 > 编程语言 >代码随想录算法训练营day13| ● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总结

代码随想录算法训练营day13| ● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总结

时间:2023-09-18 11:38:12浏览次数:47  
标签:vector nums int 随想录 347 que 239 push result

239.滑动窗口最大值

mydemo--(自己思路)--failed

超出时间限制

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> result;
        stack<int> stack;
        int len = nums.size();
        for(int i = 0; i < len - k + 1; i++)
        {
            for(int j = i; j < i + k; j++)
            {
                if(stack.empty())
                    stack.push(nums[j]);
                if(nums[j] > stack.top())
                {
                    stack.pop();
                    stack.push(nums[j]);
                }
            }
            result.push_back(stack.top());
            stack.pop();    //进入下一个窗口之前,先把当前栈清空
        }
        return result;
    }
};

卡哥demo

class Solution {
private:
    class MyQueue{
        public:
            
            deque<int> que;
            
            void pop(int value){
                // 注意判断的顺序,不要操作空队列
                if(!que.empty() && value == que.front()){
                    que.pop_front();
                }
            }

            void push(int value){
                // 注意判断的顺序,不要操作空队列
                while(!que.empty() && value > que.back()){
                    que.pop_back();
                }
                que.push_back(value);
            }

            int getMaxValue(){
                return que.front();
            }
    };

public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        MyQueue que;
        vector<int> result;
        for(int i = 0; i < k; i++){
            que.push(nums[i]);
        }
        result.push_back(que.getMaxValue());
        for(int i = k; i < nums.size(); i++){
            que.pop(nums[i - k]);
            que.push(nums[i]);
            result.push_back(que.getMaxValue());
        }
        return result;
    }
};

349. 前K个高频元素

语法难点

思路倒是懂了,但是语法难点太多了

C++ STL priority_queue详解

C++ STL priority_queue自定义排序实现方法详解

C++中 :: 的用法

image-20230918110352997

C++ STL 迭代器 iterator 的用法

/遍历 vector 容器。
#include <iostream>
//需要引入 vector 头文件
#include <vector>
using namespace std;
int main()
{
    vector<int> v{1,2,3,4,5,6,7,8,9,10}; //v被初始化成有10个元素
    cout << "第一种遍历方法:" << endl;
    //size返回元素个数
    for (int i = 0; i < v.size(); ++i)
        cout << v[i] <<" "; //像普通数组一样使用vector容器
    //创建一个正向迭代器,当然,vector也支持其他 3 种定义迭代器的方式
    
       cout << endl << "第二种遍历方法:" << endl;
       vector<int>::iterator i;
    //用 != 比较两个迭代器
    for (i = v.begin(); i != v.end(); ++i)
        cout << *i << " ";
    
       cout << endl << "第三种遍历方法:" << endl;
    for (i = v.begin(); i < v.end(); ++i) //用 < 比较两个迭代器
        cout << *i << " ";
   
       cout << endl << "第四种遍历方法:" << endl;
    i = v.begin();
    while (i < v.end()) { //间隔一个输出
        cout << *i << " ";
        i += 2; // 随机访问迭代器支持 "+= 整数"  的操作
    }
}

运行结果为:

第一种遍历方法:
1 2 3 4 5 6 7 8 9 10
第二种遍历方法:
1 2 3 4 5 6 7 8 9 10
第三种遍历方法:
1 2 3 4 5 6 7 8 9 10
第四种遍历方法:
1 3 5 7 9

卡哥demo

class Solution {
public:
    //小顶堆的比较函数的函数对象
    class mycomparison{
    public:
        bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs){
            return lhs.second > rhs.second;
        }
    };

    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int, int> map;
        for(int i = 0; i < nums.size(); i++){
            map[nums[i]]++;
        }

        //定义一个小顶堆,大小为k
        priority_queue<pair<int, int>, vector<pair<int, int>>, mycomparison> pri_que;

        for(unordered_map<int, int>::iterator it = map.begin(); it != map.end(); it++){
            pri_que.push(*it);
            if(pri_que.size() > k){
                pri_que.pop();
            }
        }

        //找出前K个高频元素,因为小顶堆先弹出的是最小的,所以倒叙输出到数组
        vector<int> result(k);
        for(int i = k-1; i >= 0; i--){
            result[i] = pri_que.top().first;
            pri_que.pop();
        }
        return result;
    }
};

标签:vector,nums,int,随想录,347,que,239,push,result
From: https://www.cnblogs.com/lycnight/p/17711395.html

相关文章

  • 代码随想录算法训练营day11| ● 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重复
    20.有效的括号卡哥democlassSolution{public:boolisValid(strings){if(s.size()%2!=0)returnfalse;stack<char>st;for(inti=0;i<s.size();i++){if(s[i]=='(')st.push('......
  • 代码随想录算法训练营-贪心算法-4|406. 根据身高重建队列、452. 用最少数量的箭引爆
    406. 根据身高重建队列1. 一定要想如何确定一个维度,然后再按照另一个维度重新排列。2.先确定身高的维度,降序排列。3. 按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。4. 局部最优:优先按身高高的peop......
  • [8]-代码随想录算法训练营-day9-字符串-part2
    代码随想录算法训练营第九天|字符串-part21.Leecode28.找出字符串中第一个匹配项的下标题目https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/思路暴力for循环刷随想录后想法KMP模式匹配算法实现困难KMP算法理解......
  • [7]-代码随想录算法训练营-day8-字符串-part1
    代码随想录算法训练营第八天|数组字符串-part11.Leecode344.反转字符串题目https://leetcode.cn/problems/reverse-string/思路刷随想录后想法双指针,用swap实现困难无实现代码classSolution{public:voidreverseString(vector<char>&s){......
  • 代码随想录算法训练营-回溯算法-2|55. 跳跃游戏、45. 跳跃游戏 II、1005. K 次取反后
    55. 跳跃游戏1.跳跃的覆盖范围。这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点!2. 贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。时间复杂度:O(n)空间复杂度:O(1)1classSolution:2defca......
  • 代码随想录算法训练营第十天
    代码随想录算法训练营第十天|LeetCode20(有效的括号)LeetCode1047(删除字符串中的所有相邻重复项)LeetCode150(逆波兰表达式求值)20:有效的括号LeetCode20(有效的括号)方法一importjava.util.Stack;classSolution{publicbooleanisValid(Strings){......
  • 代码随想录算法训练营-回溯算法|455. 分发饼干、376. 摆动序列
    1.贪心算法一般分为如下四步:将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 455. 分发饼干1.局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。时间复杂度:O(nlogn)空间......
  • [代码随想录]Day46-动态规划part14
    题目:1143.最长公共子序列思路:主要就是两大情况:text1[i-1]与text2[j-1]相同,text1[i-1]与text2[j-1]不相同如果text1[i-1]与text2[j-1]相同,那么找到了一个公共元素,所以dp[i][j]=dp[i-1][j-1]+1;如果text1[i-1]与text2[j-1]不相同,那就看看......
  • 代码随想录算法训练营第九天
    代码随想录算法训练营第九天|LeetCode232(用栈实现队列)LeetCode225(用队列实现栈)栈和队列理论基础定义栈(stack),一种遵循先进后出(FILO—First-In/Last-Out)原则的线性存储结构。队列(queue),一种遵循先进先出(FIFO—firstinfirstout)原则的线性存储结构栈方法方法名......
  • 代码随想录算法训练营第10天| 232.用栈实现队列 ● 225. 用队列实现栈
    栈和队列232.用栈实现队列stack:queue:卡哥代码一个入栈,一个出栈,即可模拟队列的pop操作pop之前要检查出栈是否为空若为空,则排出入栈里所有的元素至出栈中classMyQueue{public:stack<int>stackIn;stack<int>stackOut;MyQueue(){......