给定一个数组 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实现的更多相关文章

  1. [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 ...

  2. [Leetcode]双项队列解决滑动窗口最大值难题

    这道题是从优先队列的难题里面找到的一个题目.可是解法并不是优先队列,而是双项队列deque 其实只要知道思路,这一道题直接写没有太大的问题.我们看看题 给定一个数组 nums,有一个大小为 k 的滑动 ...

  3. Q239 滑动窗口最大值

    给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口 k 内的数字.滑动窗口每次只向右移动一位. 返回滑动窗口最大值. 示例: 输入: nums ...

  4. Leetcode 239.滑动窗口最大值

    滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口 k 内的数字.滑动窗口每次只向右移动一位. 返回滑动窗口最大值. 示例: ...

  5. Java实现 LeetCode 239 滑动窗口最大值

    239. 滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最 ...

  6. LeetCoded第239题题解--滑动窗口最大值

    滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 进 ...

  7. 代码随想录第十三天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

    第一题150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. ...

  8. [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 ...

  9. [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 ...

随机推荐

  1. 【WebAPI No.4】Swagger实现API文档功能

    介绍: Swagger也称为Open API,Swagger从API文档中手动完成工作,并提供一系列用于生成,可视化和维护API文档的解决方案.简单的说就是一款让你更好的书写API文档的框架. 我们为 ...

  2. linux安装字体方法

    1.查看系统中文字体 #fc-list :lang=zh 2.如果提示commont not fount 说明为安装fontconfig 3.安装fontconfig #yum -y install ...

  3. Vuex的基本概念、项目搭建、入坑点

    前言:Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规则保证状态以一种可预测的方式发生变化. Vuex的四大核心 1.state 驱 ...

  4. .NET Core中的路由约束

    背景介绍 上周给大家分享了Nancy in .NET Core学习笔记 - 路由之后, 就一直在考虑.NET Core能否实现和Nancy中一样的路由约束, 最近查阅了一下MSDN及一些国外博客, 发 ...

  5. python scrapy 入门,10分钟完成一个爬虫

    在TensorFlow热起来之前,很多人学习python的原因是因为想写爬虫.的确,有着丰富第三方库的python很适合干这种工作. Scrapy是一个易学易用的爬虫框架,尽管因为互联网多变的复杂性仍 ...

  6. Chapter 4 Invitations——25

    "So you are trying to irritate me to death? Since Tyler's van didn't do the job?" "所以 ...

  7. Chapter 4 Invitations——15

    He slouched off, back toward the school. 他无精打采的回去了学校. I heard a low chuckle. 我听到了低声的笑. Edward was wa ...

  8. 【Java基础】【20IO(字节流)】

    20.01_IO流(IO流概述及其分类) 1.概念 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流. 流按操 ...

  9. 阿里云弹性容器实例产品 ECI ——云原生时代的基础设施

    阿里云弹性容器实例产品 ECI ——云原生时代的基础设施 1. 什么是 ECI 弹性容器实例 ECI (Elastic Container Instance) 是阿里云在云原生时代为用户提供的基础计算 ...

  10. org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration)

    [错误原因:]maven的配置文件不是最新的 [解决办法:]依次点击help ->Install New Software -> add ->https://otto.takari. ...