2022-02-16:将数组分割成和相等的子数组。 给定一个有 n 个整数的数组,你需要找到满足以下条件的三元组 (i, j, k) : 0 < i, i + 1 < j, j + 1 < k < n
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编写。代码如下:
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
}
执行结果如下:

2022-02-16:将数组分割成和相等的子数组。 给定一个有 n 个整数的数组,你需要找到满足以下条件的三元组 (i, j, k) : 0 < i, i + 1 < j, j + 1 < k < n的更多相关文章
- 最接近的三数之和(给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数, 使得它们的和与 target 最接近。返回这三个数的和)
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). 思路:首先对数组进行排序 ...
- 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案
var threeSumClosest = function(nums, target) { let ans = nums[0] + nums[1] + nums[2]; const len = nu ...
- [LeetCode] Split Array into Consecutive Subsequences 将数组分割成连续子序列
You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...
- [LeetCode] 659. Split Array into Consecutive Subsequences 将数组分割成连续子序列
You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...
- array_chunk — 将一个数组分割成多个
说明 array_chunk ( array $array , int $size [, bool $preserve_keys = false ] ) : array 将一个数组分割成多个数组,其中 ...
- js将数组分割成等长数组
方法一: function group(array, subGroupLength) { let index = 0; let newArray = []; while(index < arra ...
- js 一数组分割成若干个数组,并装换成字符串赋个li标签
success: function (datas) { //请求成功后处理函数. var htmltext = ''; var data = datas.result; console.log(dat ...
- js将一位数组分割成每三个一组
var data = [ {name:'Liming',age:'25'}, {name:'Liming',age:'25'}, {name:'Liming',age:'25'}, { ...
- 原生js将数组分割成固定个数一组的小数组
reSetData(dataList,num) { let arr = []; let len = dataList.length; for (let i = 0; i < len; i += ...
- OC 大数组分割成由小数组重新组合的新数组
NSLog(@"++++%@",[self seprateBigArrBySize:3 BigArr:@[@"1",@"2",@" ...
随机推荐
- Linux开发——spi总线学习
1 spi总线协议简介 1.1 基本概念 SPI(Serial pe)
- 一篇文章带你快速入门学习RPA
大纲: 什么是RPA? RPA的应用领域有哪些? RPA机器人技术一般用于什么行业? RPA的市场需求是什么? RPA项目的实施过程? RPA的未来趋势怎么样? 什么是RPA? RPA 全称& ...
- 在golang中如何正确判断接口是否为nil
本文主要来分析一下在golang中,如何判断interface是否为nil,以及相关注意事项. 正常情况下,我们声明一个interface类型的变量,默认值将会返回nil,以golang自带的io.W ...
- 解决docker容器不足问题
df -h查看容量,看看那个被占满了,之前我这里是100% 用了一下docker system prune,发现没啥用,又加了-a:docker system prune -a,就又空间了. 之后再进 ...
- 2020杭电多校第四场 Go Running 最小点覆盖等于二分图最大匹配数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6808 思路:刚开始也是乱想,想几下就忍不住画个t-x图像,然后每个点有两种可能,一是向西跑,一是向东跑 ...
- 从零开始,开启属于你的 RTE 漫游之旅!丨漫游指南 x 即将启航
什么是「开发者漫游指南」? 「开发者漫游指南」邀请热爱前端开发.关心音视频领域发展.希望进入音视频行业.乐于和大家一起交流成长的小伙伴,通过「开发者漫游指南」与社区共同成长,帮助更多的开发者在实时音视 ...
- 深度学习之PyTorch实战(4)——迁移学习
(这篇博客其实很早之前就写过了,就是自己对当前学习pytorch的一个教程学习做了一个学习笔记,一直未发现,今天整理一下,发出来与前面基础形成连载,方便初学者看,但是可能部分pytorch和torch ...
- DOM0级与DOM2级的区别
1.DOM0级和DOM2级的共同优点:能添加多个事件处理程序,按顺序执行,HTML事件处理程序无法做到~2.关于dom0级和dom2级的区别DOM0级事件处理:同时绑定几个不同的事件,例如在绑定on ...
- Kubeadm安装k8s集群升级100年证书时报错:Unable to connect to the server: EOF:求解决方法.
报错信息: 使用命令时: Kubelet服务报错: 报错情况,在更新完k8s100年证书的时候,到最后重新启动kubelet服务的时候,服务是可以重新启动的,但是kubectl的命令是无法使用的,会等 ...
- EF Core从TPH迁移到TPT
Intro EF Core支持多种方式处理具有继承关系的表,现在支持TPH.TPC(EF Core 7).TPT,具体的实现方式可以参考官方文档和这篇文章. 大致总结一下不同的方式的区别: TPH:所 ...