2021-03-23:给定一个正整数组成的无序数组arr,给定一个正整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K

举报
福大大架构师每日一题 发表于 2021/03/23 20:54:07 2021/03/23
【摘要】 2021-03-23:给定一个正整数组成的无序数组arr,给定一个正整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K并且是长度最大的。返回其长度。福大大 答案2021-03-23:双指针。小于等于K时,右指针右移,窗口和的值累加,等于时收集答案;大于K时,左指针右移,窗口和的值减少。代码用golang编写,代码如下:package mainimport "fmt"func mai...

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代码
评论

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。