滑动窗口最大值的golang实现
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口 k 内的数字。滑动窗口每次只向右移动一位。
返回滑动窗口最大值
输入: 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
其实这道题就是求给定数组中获取全部K个连续元素中最大值的集合
首先我们可能会遇到三中情况
- 当原始数组为空的,那就直接返回一个空数组
- 如果原始数组的长度与给定的k是一样的,那么就直接去原始数组的最大值即可
- 如果原始数组的长度大于K,那么我们就要求每个连续子数组的最大值了
对于第一种情况就非常简单了
var result []int//如果切片长度为0的话,那就直接返回空切片if len(nums) == 0 {return result}
对于第二种情况:
//如果切片长度与k一样if len(nums) == k {result = append(result, getMax(nums))return result}
对于第三种情况:
var windowSlice []intindex := 0for i := k; i <= len(nums); i++ {windowSlice = nums[index:i]result = append(result, getMax(windowSlice))index++}return result
这里每次都获取连续K个元素进行比较
全部代码:
package mainimport "fmt"func maxSlidingWindow(nums []int, k int) []int {var result []int//如果切片长度为0的话,那就直接返回空切片if len(nums) == 0 {return result}//如果切片长度与k一样if len(nums) == k {result = append(result, getMax(nums))return result}var windowSlice []intindex := 0for i := k; i <= len(nums); i++ {windowSlice = nums[index:i]result = append(result, getMax(windowSlice))index++}return result }func getMax(windowSlice []int) int {max := windowSlice[0]for i := 0; i < len(windowSlice); i++ {if windowSlice[i] >= max {max = windowSlice[i]}}return max }func main() {nums := []int{1, 3, -1, -3, 5, 3, 6, 7}fmt.Println(maxSlidingWindow(nums, 3))// nums := []int{}// fmt.Println(maxSlidingWindow(nums, 0))// nums := []int{1, -1}// fmt.Println(maxSlidingWindow(nums, 1)) }
附上老师的解法,但是我看不懂!
func maxSlidingWindow(nums []int, k int) []int {result := []int{}if len(nums) == 0 {return result}window := []int{}for i, x := range nums {if i >= k && window[0] <= i-k {window = window[1:]}for len(window) != 0 && nums[window[len(window)-1]] <= x {window = []int{}}window = append(window, i)if i >= k-1 {result = append(result, nums[window[0]])}}return result }
转载于:https://www.cnblogs.com/TimLiuDream/p/10117084.html
滑动窗口最大值的golang实现相关推荐
- 嗯,查询滑动窗口最大值的这4种方法不错....
作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 Github<小白学算法>系列:https://gith ...
- 【LeetCode】【HOT】239. 滑动窗口最大值(双向队列)
[LeetCode][HOT]239. 滑动窗口最大值 文章目录 [LeetCode][HOT]239. 滑动窗口最大值 package hot;import java.util.Arrays; im ...
- 你还在为查询滑动窗口最大值发愁吗?点开看最高效率解法!
作者 | 王磊 来源 | Java中文社群(ID:javacn666) 头图 | CSDN 下载自东方IC 本文已收录至 Github<小白学算法>系列:https://github.c ...
- Suzy找到实习了吗Day 13 | 栈和队列结束啦 239. 滑动窗口最大值,347. 前 K 个高频元素
day 13 239. 滑动窗口最大值 Python的Deque模块详解 solution 我复制的,好难不会写 347. 前 K 个高频元素(一刷我没有用栈,用的哈希法) solution(hash ...
- 单调区间之239.滑动窗口最大值
单调区间 239. 滑动窗口最大值 这个题如果用普通的优先队列是有问题的,因为每次弹出去的不知道是上一个窗口的左边界还是这个窗口里的元素.我们要的是每次只弹出上一个窗口的左边界并且还能弹出最值,所以这 ...
- (补)算法训练Day13 | LeetCode150. 逆波兰表达式求值(栈应用);LeetCode239. 滑动窗口最大值(单调队列);LeetCode347. 前K个高频元素(小顶堆,优先级队列)
目录 LeetCode150. 逆波兰表达式求值 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode239. 滑动窗口最大值 1. 思路 2. 代码实现 3. 复杂度分析 4. ...
- CodeTop055 滑动窗口最大值
滑动窗口最大值 给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧. 你只可以看到在滑动窗口内的k个数字.滑动窗口每次只向右移动一位 返回滑动窗口中的最大值 使用双端队 ...
- 栈和队列6:滑动窗口最大值
问题描述: 题目链接: 滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. ...
- 直播视频网站源码,滑动窗口最大值
直播视频网站源码,滑动窗口最大值的相关代码 class Solution { public:vector<int> maxSlidingWindow(vector<int>&a ...
最新文章
- 透露|Java学习的最后一点小秘密
- 基于Boost::beast模块的同步HTTP客户端
- iis 改了php ini不生效,Windows IIS 集成PHP时修改PHP.ini 配置后不生效问题
- 三十四、数据仓库的建模
- [CSS]BlendTrans滤镜
- 论文笔记--网络新闻图像中人脸标注技术的研究-2011
- LINUX剪贴板调用接口获取数据
- vlan的基本指令_华为:vlan基础命令及配置实验
- MATLAB的图像显示函数imshow()详解
- three.js 加载fbx文件并解析
- [转]在数学的海洋中飘荡
- HTML5 1.4 列表
- 青蛙相会(frog)
- 直播平台开发中解决iOS 14 兼容问题和静默推送
- 斜杆“/”和反斜杠“\”的区别
- 正弦稳态电路的相关概念
- spring boot在启动程序之前执行逻辑
- 及其简单的一种获得提取码的方法
- 如何将多段16:9的视频同时裁切为1:1的视频
- 一款不错的LaTex作业模块
热门文章
- 深度学习-吴恩达-笔记-3-浅层神经网络
- Windows 10 JDK安装及环境配置(vim+gcc)
- python找房源_python抓取链家房源信息(二)
- html audio无法播放,audio 无法播放的问题
- 本地算术验证码识别教程
- 如何去除Druid数据监控广告?
- date工具类 DateUtils.java
- Docker Windows 安装
- web小知识与问题串烧(html,css,js)
- centos7解压安装mysql_CentOS7 安装Mysql5.7 解压缩版