编程语言
首页 > 编程语言> > [算法] 剑指offer2 golang 面试题8:和大于或等于k的最短子数组

[算法] 剑指offer2 golang 面试题8:和大于或等于k的最短子数组

作者:互联网

[算法] 剑指offer2 golang 面试题8:和大于或等于k的最短子数组

题目1:

在这里插入图片描述

思路1: 滑动窗口

//思路: 滑动窗口
//指针 [left,right] 记录连续子数组的区间,并记录区间和 sum
//if sum < target; right ++ ;sum += nums[right]
//if sum >= target; 更新最小长度 minLen; sum -= nums[left]; left++

代码

func minSubArrayLen(target int, nums []int) int {
    //思路: 滑动窗口
    //指针 [left,right] 记录连续子数组的区间,并记录区间和 sum
    //if sum < target; right ++ ;sum += nums[right]
    //if sum >= target; 更新最小长度 minLen; sum -= nums[left]; left++
    
    //参数处理
    if len(nums) ==0 || target <= 0{
        return -1
    }

    //滑动窗口
    minLen := 0
    left,right,sum := 0,0,nums[0]
    for left <= right{
        if sum < target {
            right ++
            //这里会有指针溢出 todo
            if right  == len(nums) {
                return minLen
            }
            sum += nums[right]
        }else {
            //更新最小长度
            tempLen := right - left + 1
            if tempLen < minLen || minLen == 0{
                minLen = tempLen
            }
            sum -= nums[left]
            left ++
        }
    }
    return minLen
}

测试

在这里插入图片描述

标签:面试题,right,target,nums,sum,minLen,golang,offer2,left
来源: https://blog.csdn.net/jarvan5/article/details/123607904