【Golang】LeetCode-剑指Offer-面试题59 - I - 滑动窗口的最大值【两种写法】
2020-03-05 01:26
741 查看
解法一:队列——解题思路
- 设置变量 max 用于记录窗口中的最大值的索引
- 窗口滑动后 如果出去的值(的索引)是最大值(的索引),那么新的窗口则需要重新查找最大值并设置 max 这里使用双指针查找窗口中的最大值 / (最大值的索引)
-
不大于则最大值(的索引)可不变
写法一:比较下标
–执行用时:16 ms --内存消耗:6.4 MB
func maxSlidingWindow(nums []int, k int) []int { if len(nums) == 0 || k <= 0 || k > len(nums){ return nil } var maxNums []int //max用于记录窗口中的最大值的索引 max := -1 for i:=0;i<=len(nums)-k;i++{ l := i r := i+k-1 //如果出去的值是最大值(的索引),那么新的窗口需要重新查找最大值并设置 if max == -1 || max == l-1 { max = getMax(nums,l,r) }else{ //如果出去的值不是最大值(的索引),则判断新进来的值是否大于当前的最大值 //不大于则最大值(的索引)不变 //大于则将进来的值(的索引)作为最大值(的索引) if nums[r] > nums[max] { max = r } } maxNums = append(maxNums,nums[max]) } return maxNums } //双指针查找最大值的索引 func getMax(nums []int,left,right int) int { for left<right{ if nums[left]>nums[right]{ right-- }else{ left++ } } return left }
写法二:比较值本身
–执行用时:20 ms --内存消耗:6.4 MB
func maxSlidingWindow(nums []int, k int) []int { if len(nums) == 0 || k <= 0 || k > len(nums){ return nil } var maxNums []int maxNow:=max(nums[0:k]) maxNums=append(maxNums,maxNow) for i:=1;i<=len(nums)-k;i++{ if nums[i-1]==maxNow{ maxNow=max(nums[i:i+k]) maxNums=append(maxNums,maxNow) }else{ if nums[i+k-1]<=maxNow{ maxNums=append(maxNums,maxNow) }else{ maxNow=max(nums[i:i+k]) maxNums=append(maxNums,maxNow) } } } return maxNums } func max(nums []int) int { left:=0 right:=len(nums)-1 for left<right{ if nums[left]>nums[right]{ right-- }else{ left++ } } return nums[left] }
解法二:暴力法
–执行用时:44 ms --内存消耗:6.4 MB
func maxSlidingWindow(nums []int, k int) []int { if len(nums) == 0 || k <= 0 || k > len(nums){ return nil } var maxNums []int for i:=0;i<=len(nums)-k;i++{ maxNums=append(maxNums,max(nums[i:i+k])) } return maxNums } func max(nums []int) int { left:=0 right:=len(nums)-1 for left<right{ if nums[left]>nums[right]{ right-- }else{ left++ } } return nums[left] }
在LeetCode该题中,我也有提交题解,欢迎查看。昵称:Sakura。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【Golang】LeetCode-剑指Offer-面试题14- I-剪绳子【两种写法】
- 【Golang】LeetCode-剑指Offer-面试题16-数值的整数次方【两种解法】
- 【Golang】LeetCode-剑指Offer-面试题32 - I-从上到下打印二叉树【两种解法】
- 牛客剑指Offer面试题59:队列的最大值(题目1:滑动窗口的最大值)
- 【Golang】LeetCode-剑指Offer-面试题61-扑克牌中的顺子【两种解法】
- 【Golang】LeetCode-剑指Offer-面试题33-二叉搜索树的后序遍历序列【两种解法】
- 【剑指offer】面试题59(1):滑动窗口的最大值
- 【剑指Offer学习】【面试题65:滑动窗口的最大值】
- 【Golang】LeetCode-剑指Offer-面试题26-树的子结构
- 【Golang】LeetCode-剑指Offer-面试题32 - III-从上到下打印二叉树 III
- 剑指Offer-59 滑动窗口的最大值
- 【剑指Offer】面试题65:滑动窗口的最大值
- 【Golang】LeetCode-剑指Offer-面试题44-数字序列中某一位的数字
- 【Golang】LeetCode-剑指Offer-面试题13-机器人的运动范围
- 剑指Offer(59)滑动窗口最大值
- 【Golang】LeetCode-剑指Offer-面试题49-丑数
- 【Golang】LeetCode-剑指Offer-面试题12-矩阵中的路径
- 剑指offer 面试题65 滑动窗口的最大值
- 【Golang】LeetCode-剑指Offer-面试题48-最长不含重复字符的子字符串
- 【Golang】LeetCode-剑指Offer-面试题07-重建二叉树