前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022-02-16:将数组分割成和相等的子数组。 给定一个有 n

2022-02-16:将数组分割成和相等的子数组。 给定一个有 n

原创
作者头像
福大大架构师每日一题
发布2022-02-16 22:22:37
4930
发布2022-02-16 22:22:37
举报

2022-02-16:将数组分割成和相等的子数组。

给定一个有 n 个整数的数组,你需要找到满足以下条件的三元组 (i, j, k) :

0 < i, i + 1 < j, j + 1 < k < n - 1

子数组 (0, i - 1),(i + 1, j - 1),(j + 1, k - 1),(k + 1, n - 1) 的和应该相等。

这里我们定义子数组 (L, R) 表示原数组从索引为L的元素开始至索引为R的元素。

示例:

输入: 1,2,1,2,1,2,1

输出: True

解释:

i = 1, j = 3, k = 5.

sum(0, i - 1) = sum(0, 0) = 1

sum(i + 1, j - 1) = sum(2, 2) = 1

sum(j + 1, k - 1) = sum(4, 4) = 1

sum(k + 1, n - 1) = sum(6, 6) = 1

注意:

1 <= n <= 2000。

给定数组中的元素会在 -1,000,000, 1,000,000 范围内。

力扣548。

答案2022-02-16:

暴力枚举。

时间复杂度:O(N**3)。

空间复杂度:O(N)。

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

代码语言:go
复制
package main

import "fmt"

func main() {
    ret := splitArray([]int{1, 2, 1, 2, 1, 2, 1})
    fmt.Println(ret)
}

func splitArray(nums []int) bool {
    if len(nums) < 7 {
        return false
    }
    sumLeftToRight := make([]int, len(nums))
    sumRightToLeft := make([]int, len(nums))
    s := 0
    for i := 0; i < len(nums); i++ {
        sumLeftToRight[i] = s
        s += nums[i]
    }
    s = 0
    for i := len(nums) - 1; i >= 0; i-- {
        sumRightToLeft[i] = s
        s += nums[i]
    }
    for i := 1; i < len(nums)-5; i++ {
        for j := len(nums) - 2; j > i+3; j-- {
            if sumLeftToRight[i] == sumRightToLeft[j] && find(sumLeftToRight, sumRightToLeft, i, j) {
                return true
            }
        }
    }
    return false
}

func find(sumLeftToRight, sumRightToLeft []int, l, r int) bool {
    s := sumLeftToRight[l]
    prefix := sumLeftToRight[l+1]
    suffix := sumRightToLeft[r-1]
    for i := l + 2; i < r-1; i++ {
        s1 := sumLeftToRight[i] - prefix
        s2 := sumRightToLeft[i] - suffix
        if s1 == s2 && s1 == s {
            return true
        }
    }
    return false
}

执行结果如下:

图片
图片

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档