滑动窗口最大值的golang实现
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口 k 内的数字。滑动窗口每次只向右移动一位。
返回滑动窗口最大值
- 输入: nums = [,,-,-,,,,], 和 k =
- 输出: [,,,,,]
- 解释:
- 滑动窗口的位置 最大值
- --------------- -----
- [ -] -
- [ - -]
- [- - ]
- - [- ]
- - - [ ]
- - - [ ]
其实这道题就是求给定数组中获取全部K个连续元素中最大值的集合
首先我们可能会遇到三中情况
- 当原始数组为空的,那就直接返回一个空数组
- 如果原始数组的长度与给定的k是一样的,那么就直接去原始数组的最大值即可
- 如果原始数组的长度大于K,那么我们就要求每个连续子数组的最大值了
对于第一种情况就非常简单了
- var result []int
- //如果切片长度为0的话,那就直接返回空切片
- if len(nums) == {
- return result
- }
对于第二种情况:
- //如果切片长度与k一样
- if len(nums) == k {
- result = append(result, getMax(nums))
- return result
- }
对于第三种情况:
- var windowSlice []int
- index :=
- for i := k; i <= len(nums); i++ {
- windowSlice = nums[index:i]
- result = append(result, getMax(windowSlice))
- index++
- }
- return result
这里每次都获取连续K个元素进行比较
全部代码:
- package main
- import "fmt"
- func maxSlidingWindow(nums []int, k int) []int {
- var result []int
- //如果切片长度为0的话,那就直接返回空切片
- if len(nums) == {
- return result
- }
- //如果切片长度与k一样
- if len(nums) == k {
- result = append(result, getMax(nums))
- return result
- }
- var windowSlice []int
- index :=
- for 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[]
- for i := ; i < len(windowSlice); i++ {
- if windowSlice[i] >= max {
- max = windowSlice[i]
- }
- }
- return max
- }
- func main() {
- nums := []int{, , -, -, , , , }
- fmt.Println(maxSlidingWindow(nums, ))
- // 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) == {
- return result
- }
- window := []int{}
- for i, x := range nums {
- if i >= k && window[] <= i-k {
- window = window[:]
- }
- for len(window) != && nums[window[len(window)-]] <= x {
- window = []int{}
- }
- window = append(window, i)
- if i >= k- {
- result = append(result, nums[window[]])
- }
- }
- return result
- }
滑动窗口最大值的golang实现的更多相关文章
- [Swift]LeetCode239. 滑动窗口最大值 | Sliding Window Maximum
Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...
- [Leetcode]双项队列解决滑动窗口最大值难题
这道题是从优先队列的难题里面找到的一个题目.可是解法并不是优先队列,而是双项队列deque 其实只要知道思路,这一道题直接写没有太大的问题.我们看看题 给定一个数组 nums,有一个大小为 k 的滑动 ...
- Q239 滑动窗口最大值
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口 k 内的数字.滑动窗口每次只向右移动一位. 返回滑动窗口最大值. 示例: 输入: nums ...
- Leetcode 239.滑动窗口最大值
滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口 k 内的数字.滑动窗口每次只向右移动一位. 返回滑动窗口最大值. 示例: ...
- Java实现 LeetCode 239 滑动窗口最大值
239. 滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最 ...
- LeetCoded第239题题解--滑动窗口最大值
滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 进 ...
- 代码随想录第十三天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素
第一题150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. ...
- [LeetCode] Sliding Window Maximum 滑动窗口最大值
Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...
- [leetcode]239. Sliding Window Maximum滑动窗口最大值
Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...
随机推荐
- angularJS学习(二)
1.实现列表 思路: accessCtrl.js let AccessCtrl = function($scope, AlertService, DialogService, BigDataServi ...
- Android app 架构的一些讨论和资源收藏
架构 https://www.zhihu.com/question/21406685 MVP,MVC,MVVM框架 http://blog.csdn.net/copy_yuan/article/det ...
- python操作符笔记
1.**两个乘号就是乘方,比如2**4,结果就是2的4次方,结果是16 2.//就是做浮点除法,并舍弃小数部分(注意不是四舍五入) 3.@是python中的修饰符,具体功能我没弄懂.
- 自定义微信小程序导航(兼容各种手机)
详细代码请见github,请点击地址,其中有原生小程序的实现,也有wepy版本的实现 了解小程序默认导航 如上图所示,微信导航分为两部分,第一个部分为statusBarHeight,刘海屏手机(iPh ...
- leetcode — pascals-triangle-ii
import java.util.Arrays; /** * * Source : https://oj.leetcode.com/problems/pascals-triangle-ii/ * * ...
- 流式大数据计算实践(5)----HBase使用&SpringBoot集成
一.前言 1.上文中我们搭建好了一套HBase集群环境,这一文我们学习一下HBase的基本操作和客户端API的使用 二.shell操作 先通过命令进入HBase的命令行操作 /work/soft/hb ...
- 【Node.js】一、搭建基于Express框架运行环境+更换HTML视图引擎
1)安装express generator生成器 这个express generator生成器类似于vue-cli脚手架工具,用来创建一个后端项目,首先我们要对生成器进行全局安装,在cmd中输入下 ...
- Django 系列博客(十二)
Django 系列博客(十二) 前言 本篇博客继续介绍 Django 中的查询,分别为聚合查询和分组查询,以及 F 和 Q 查询. 聚合查询 语法:aggregate(*args, **kwargs) ...
- SpringCloud学习(二):微服务入门实战项目搭建
一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...
- [JavaScript] audio在浏览器中自动播放
audio 在浏览器中自动播放 autoplay 属性 autoplay 属性规定一旦音频就绪马上开始播放. 如果设置了该属性,音频将自动播放. 使用 autoplay 属性进行播放 //使用auto ...