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

如何做领券网站长沙seo全网营销

如何做领券网站,长沙seo全网营销,微网站开发报价,做电影网站前途239. 滑动窗口最大值 难度困难 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例 1: 输入:nums …

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]

示例 3:

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

示例 4:

输入:nums = [9,11], k = 2
输出:[11]

示例 5:

输入:nums = [4,-2], k = 2
输出:[4]

思路:

暴力法:很容易解,两重循环,第一重循环控制的遍历整个数组,每个第二重循环再遍历k个元素。这样的话,每个元素都要被遍历k次,重复遍历。时间复杂度为O(n*k),因为这题的测试用例高达10^5,所以会超时。

for(size_t i=0;i<nums.size();i++){int maxValue=INT_MIN;for(size_t j=i;j<i+k;j++){maxValue=max(maxValue,nums[j]);}res.push_back(maxValue);
}

什么是滑动窗口?

队列LeetCode239动画01.gif

队列LeetCode239窗口滑动.gif

在上述滑动窗口形成及移动的过程中,我们注意到元素是从窗口的右侧进入的,然后由于窗口大小是固定的,因此多余的元素是从窗口左侧移除的。 一端进入,另一端移除,这不就是队列的性质吗?所以,该题目可以借助队列来求解。

题目要求是返回每个窗口中的最大值。那么这个如何解决呢?我们以数组{5, 3, 4, 1},窗口大小k=3来进行说明。这里我们规定窗口右侧边界为right,左侧边界为left,其值为元素下标。然后,开始遍历nums = {5, 3, 4, 1}。当right指向第一个元素5时,此时队列为空,将第一个元素5入队。

队列LeetCode239元素5入队.gif

继续考察第二个元素3,此时3小于队列末尾的元素5,因此元素3入队,以便看其是否是下一个窗口的最大值。这时队列中元素从队首到队尾是递减的。

队列LeetCode239元素3入队.gif

接着考察{5, 3, 4, 1}中的第三个元素4,此时4大于队尾元素3,这表明元素3不可能是窗口「5 3 4」中的最大元素,因此需要将其从队列移除。但队首有元素5存在,因此不能将其从队首移除,那怎么办呢?我们可以将其从队尾移除。

对于这种一端既可以有元素入队,又有元素出队的队列,称之为双向队列。

队尾元素3出队之后,由于新的队尾元素5大于当前考察元素4,因此元素4入队,以便看其是否是下一个窗口的最大值。

当元素4入队之后,我们发现这时,队列中元素从队首到队尾依旧是递减的。我们把从队首到队尾单调递减或递增的队列称之为单调队列。

队列LeetCode2393出队4入队.gif

接着,考察第四个元素1,此时元素1小于队尾元素4,因此元素1入队。

队列LeetCode2391入队.gif

但这时,窗口内有4个元素,而我们这里规定窗口大小是3,因此,需要缩小窗口左边界left。

在缩小窗口左边界left后,意味着元素5已经不再窗口内了,因此,队首元素5需要出队。也就是说,当队首元素在原数组中的下标小于窗口左边界时,队首元素就需要移除队列。

队列LeetCode239缩小边界5出队.gif

至此,该题目的求解思路就清晰了,具体如下:

  1. 遍历给定数组中的元素,如果队列不为空且当前考察元素大于等于队尾元素,则将队尾元素移除。直到,队列为空或当前考察元素小于新的队尾元素;
  2. 当队首元素的下标小于滑动窗口左侧边界left时,表示队首元素已经不再滑动窗口内,因此将其从队首移除。
  3. 由于数组下标从0开始,因此当窗口右边界right+1大于等于窗口大小k时,意味着窗口形成。此时,队首元素就是该窗口内的最大值。

需要说明的一点是,在上述动画演示中,队列存储的是元素值。而在具体代码实现中,为了方便计算,队列中存储的是元素的下标,详细注释如下:

   public int[] maxSlidingWindow(int[] nums, int k) {// 窗口个数int[] res = new int[nums.length - k + 1];LinkedList<Integer> queue = new LinkedList<>();// 遍历数组中元素,right表示滑动窗口右边界for(int right = 0; right < nums.length; right++) {// 如果队列不为空且当前考察元素大于等于队尾元素,则将队尾元素移除。// 直到,队列为空或当前考察元素小于新的队尾元素while (!queue.isEmpty() && nums[right] >= nums[queue.peekLast()]) {queue.removeLast();}// 存储元素下标queue.addLast(right);// 计算窗口左侧边界int left = right - k +1;// 当队首元素的下标小于滑动窗口左侧边界left时// 表示队首元素已经不再滑动窗口内,因此将其从队首移除if (queue.peekFirst() < left) {queue.removeFirst();}// 由于数组下标从0开始,因此当窗口右边界right+1大于等于窗口大小k时// 意味着窗口形成。此时,队首元素就是该窗口内的最大值if (right +1 >= k) {res[left] = nums[queue.peekFirst()];}}return res;}

也可以将LinkedList<Integer>换成Deque<Integer>

class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int n = nums.length;if(n==0)  return nums;// 窗口个数int[] res = new int[n-k+1];Deque<Integer> dq = new LinkedList<>();// 遍历数组中元素,right表示滑动窗口右边界for(int right=0;right<n;right++){// 如果队列不为空且当前考察元素大于等于队尾元素,则将队尾元素移除。// 直到,队列为空或当前考察元素小于新的队尾元素while(!dq.isEmpty() && nums[right] >= nums[dq.getLast()]){dq.removeLast();}// 存储元素下标dq.addLast(right);// 计算窗口左侧边界int left = right - k +1;// 当队首元素的下标小于滑动窗口左侧边界left时// 表示队首元素已经不再滑动窗口内,因此将其从队首移除if(dq.getFirst() < left)dq.removeFirst();// 当队首元素的下标小于滑动窗口左侧边界left时// 表示队首元素已经不再滑动窗口内,因此将其从队首移除。即当前窗口范围:[right-k+1,right]if(right+1>=k){res[left] = nums[dq.getFirst()];}}return res;}
}

 

 

http://www.lbrq.cn/news/2795077.html

相关文章:

  • 网站推广效果不好原因是网页版百度
  • 成都个人网站制作公司十大计算机培训学校
  • 什么情况自己建设网站百度在线提问
  • 西电信息化建设处网站百度竞价推广开户费用
  • 浙江省电子商务网站建设宁波网站制作优化服务
  • 网站建设启示厦门seo新站策划
  • 中企动力网站后台 好用吗百度快速排名软件下载
  • 做网站付多少定金优化seo厂家
  • 工作是套模板做网站北京seo加盟
  • 怎么做自动提卡网站常德政府网站市民留言
  • 做网站维护价格今日足球比赛分析推荐
  • 渭南市建网站产品线下推广方式都有哪些
  • 大余网站帮我搜一下长沙做网络销售
  • 做网站需要看那几点排名优化公司口碑哪家好
  • 网站备案未注销 影响网站如何优化推广
  • wordpress h5制作插件武汉整站优化
  • 用照片做的ppt模板下载网站淘数据
  • 重庆网站推广机构衡水seo营销
  • 电商网站设计规划书seo网站排名优化教程
  • 安徽建网站公司怎样优化关键词到首页
  • 网站怎么做隐藏内容谷歌优化seo
  • wordpress 用户权限分配seo网络营销课程
  • 潍坊哪家做网站做的最好竞价托管推广
  • 上传设计作品的网站郑州网站优化推广
  • 专业网站建设服务报价百度站长工具验证
  • 垦利网页定制seo网站推广计划
  • 青岛 网站维护关键字
  • 怎么做网站内部搜索功能软文广告示范
  • wordpress下拉南宁网站运营优化平台
  • 织梦可以做婚纱影楼网站吗免费seo
  • 【笔记】Facefusion3.3.2 之 NSFW 检测屏蔽测试
  • 0821 sqlite3_get_table函数(数据库函数的补充)
  • DRF序列化器
  • day075-MySQL数据库服务安装部署与基础服务管理命令
  • Qt5.9.9 + Windows API 开发系统监控工具 - 教学级项目实战
  • Diamond开发经验(1)