zoukankan      html  css  js  c++  java
  • 2021-03-23:给定一个正整数组成的无序数组arr,给定一个正整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K并且是长度最大的。返回其长度。

    2021-03-23:给定一个正整数组成的无序数组arr,给定一个正整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K并且是长度最大的。返回其长度。

    福大大 答案2021-03-23:

    双指针。小于等于K时,右指针右移,窗口和的值累加,等于时收集答案;大于K时,左指针右移,窗口和的值减少。

    代码用golang编写,代码如下:

    package main
    
    import "fmt"
    
    func main() {
        arr := []int{1, 2, 3, 0}
        ret := getMaxLength(arr, 6)
        fmt.Println(ret)
    }
    func getMaxLength(arr []int, K int) int {
        arrLen := len(arr)
        if arrLen == 0 {
            return 0
        }
        ans := 0
        left := 0
        right := 0
    
        sum := arr[0]
        for right < arrLen-1 {
            if sum == K {
                ans = getMax(ans, right-left+1)
                right++
                sum += arr[right]
            } else if sum < K {
                right++
                sum += arr[right]
            } else {
                sum -= arr[left]
                left++
            }
        }
    
        if sum == K {
            ans = getMax(ans, right-left+1)
        }
    
        return ans
    }
    
    func getMax(a int, b int) int {
        if a > b {
            return a
        } else {
            return b
        }
    }
    
    

    执行结果如下:

    在这里插入图片描述


    左神java代码
    评论

  • 相关阅读:
    常用函数
    小工具
    javascript实现的平方米、亩、公顷单位换算小程序
    在spring boot 项目中使用thymeleaf模板
    IntellJ IDEA 中JAVA代码的任务标记(TODO、FIXME、【XXX】)
    XMPP学习
    iOS绘图教程(个人学习总结)
    iOS: #ifdef DEBUG
    iphone sdk版本宏
    xmpp
  • 原文地址:https://www.cnblogs.com/waitmoon/p/14571203.html
Copyright © 2011-2022 走看看