当前位置: 首页 > news >正文

龙岩疫情防控指挥部最新通知关键词优化排名费用

龙岩疫情防控指挥部最新通知,关键词优化排名费用,郑州网站建设找智巢,营销网站建设需要多少钱每日一题(LeetCode)----栈和队列–滑动窗口最大值 1.题目(239. 滑动窗口最大值) 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 …

每日一题(LeetCode)----栈和队列–滑动窗口最大值

1.题目(239. 滑动窗口最大值)

  • 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

    返回 滑动窗口中的最大值

    示例 1:

    输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
    输出:[3,3,5,5,6,7]
    解释:
    滑动窗口的位置                最大值
    ---------------               -----
    [1  3  -1] -3  5  3  6  7       31 [3  -1  -3] 5  3  6  7       31  3 [-1  -3  5] 3  6  7       51  3  -1 [-3  5  3] 6  7       51  3  -1  -3 [5  3  6] 7       61  3  -1  -3  5 [3  6  7]      7
    

    示例 2:

    输入:nums = [1], k = 1
    输出:[1]
    

    提示:

    • 1 <= nums.length <= 105
    • -104 <= nums[i] <= 104
    • 1 <= k <= nums.length

2.解题思路

思路一:使用优先队列

优先队列的底层实现是堆,默认是大顶堆

1.我们先创建一个优先队列底层是大顶堆的,便于我们维护最大值,且这个优先队列中的每一个元素都是二元组的(每一个二元组的元素的第一个表示的是数组中的一个数,第二个表示的是这个数在数组中对应的下标),便于我们之后将不在滑动窗口范围内的元素删除 然后再创建一个动态数组用来存每一个滑动窗口的最大值

2.初始时,我们先根据k变量的大小,把数组的前k个元素连带着它们的下标放入到优先队列中去

3.我们从第k+1个元素开始向后遍历,每遍历到一个元素,将当前元素连带着它的下标作为一个二元组元素放入到优先队列中去,然后将优先队列的首元素中存的下标与当前滑动窗口的左边界进行比较如果比左边界小那么就删除当前优先队列的首元素直到优先队列的首元素中存的下标比左边界大结束,然后将当前优先队列首元素存的值放入到动态数组中去,继续向后遍历

在滑动窗口中,在这种情况下,这个值在数组 nums\textit{nums}nums 中的位置出现在滑动窗口左边界的左侧。因此,当我们后续继续向右移动窗口时,这个值就永远不可能出现在滑动窗口中了,我们可以将其永久地从优先队列中移除。

我们不断地移除堆顶的元素,直到其确实出现在滑动窗口中。此时,堆顶元素就是滑动窗口中的最大值。

思路来源:力扣官方题解
链接:https://leetcode.cn/problems/sliding-window-maximum/

思路二:双向队列(单调队列)

1.我们先创建一个双向队列(单调队列),这个队列存的是数组中元素的下标,我们要保证这个队列中存的元素的下标对应的数是递减的,然后我们再创建一个动态数组用来存每一个滑动窗口的最大值

2.初始时,我们先根据k变量的大小,先对数组中前k个元素进行处理,当队列为空时,我们直接把当前遍历到的元素对应的下标放入到队列末尾,当队列不为空时,且当前遍历到的元素的值大于队列末尾下标所对应的数的值,那么我们删除队列的末尾元素,继续与队列末尾元素进行比较,直到当前遍历到的元素的值小于队列末尾下标所对应的数的值,我们将当前元素对应的下标放入到队列的末尾

3.我们从第k+1个元素开始向后遍历,每遍历到一个元素,看队列是否为空,当队列为空时,我们直接把当前遍历到的元素对应的下标放入到队列末尾,当队列不为空时,且当前遍历到的元素的值大于队列末尾下标所对应的数的值,那么我们删除队列的末尾元素,继续与队列末尾元素进行比较,直到当前遍历到的元素的值小于队列末尾下标所对应的数的值,我们将当前元素对应的下标放入到队列的末尾,再将队列的首元素的值与当前滑动窗口的左边界进行比较,如果比左边界小那么就删除当前队列的首元素直到队列的首元素的值比左边界大结束,然后将当前队列首元素在数组中对应的值放入到动态数组中去,继续向后遍历

思路来源:力扣官方题解
链接:https://leetcode.cn/problems/sliding-window-maximum/

3.写出代码

思路一的代码

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {priority_queue<pair<int,int>> q;int n=nums.size();for(int i=0;i<k;i++){q.emplace(nums[i],i);}vector<int> ans={q.top().first};for(int i=k;i<n;i++){q.emplace(nums[i],i);while(q.top().second<=i-k){q.pop();}ans.push_back(q.top().first);}return ans;}
};
思路来源:力扣官方题解
链接:https://leetcode.cn/problems/sliding-window-maximum/

思路二的代码

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {deque<int> q;int n=nums.size();for(int i=0;i<k;i++){while(!q.empty()&&nums[i]>=nums[q.back()]){q.pop_back();}q.push_back(i);}vector<int> ans={nums[q.front()]};for(int i=k;i<n;i++){while(!q.empty()&&nums[i]>=nums[q.back()]){q.pop_back();}q.push_back(i);while(q.front()<=i-k){q.pop_front();}ans.push_back(nums[q.front()]);}return ans;}
};
思路来源:力扣官方题解
链接:https://leetcode.cn/problems/sliding-window-maximum/
http://www.khdw.cn/news/40561.html

相关文章:

  • 南沙做网站公司网站推广优化排名教程
  • 什么做网站赚钱网站关键字优化价格
  • 开个小网站要怎么做网络推广营销网
  • dede网站地图地睛企业文化标语
  • 外贸跨境电商网站建设开发制作一个网站步骤
  • 网站建设技术分为哪些方向免费制作个人网站
  • 驻马店网站优化今天最新新闻10条
  • 廊坊网站建设外包火星培训机构收费明细
  • 政务网站建设方案百度服务
  • 洛阳霞光做网站公司seo服务外包公司
  • 网站注册页面怎么做数据验证app推广接单
  • 我公司网站开发技术优势百度百家号注册
  • 怎样申请免费网站域名十大基本营销方式
  • 大气网站首页欣赏网站内部seo优化包括
  • 比特币网站做任务seo博客教程
  • 电子商务网站开发与实现我想做网络推广找谁
  • 北京网站建设公司费用外包公司到底值不值得去
  • 武汉文理学院机电与建筑工程网站什么是网站外链
  • php免费网站建设百度的人工客服电话
  • 网站开发字体seo快速优化文章排名
  • 赛罕区城乡建设局网站今日军事头条新闻
  • 网站面包屑导航代码河南网站网络营销推广
  • 自己做的网站竞价好还是单页好百度云电脑网页版入口
  • 做电商不不得不知道的网站百度极速版下载安装最新版
  • 百度网站建设怎么联系云南网站建设快速优化
  • 做网站在哪里做比较好优化设计数学
  • 做企业网站靠谱的站长查询工具
  • 公职人员可以做公益网站吗搜索引擎优化公司
  • 可以做哪方面的网站高端网站建设制作
  • 影响网站排名重要因素搜索引擎优化的五个方面