#240. 受限子集和问题
受限子集和问题
受限子集和
题目背景
聪聪正在解决一个有趣的数字谜题。他得到了一组整数和一个目标和,需要从这组整数中选择一些数字,使它们的和等于目标和。然而,这个谜题有一个特殊的规则,让聪聪感到有些困惑。
题目描述
给定一个整数数组 nums 和一个目标整数 target。判断是否可能从 nums 中选择一个子集,使得该子集的元素之和等于 target。
此外,还有一个额外的约束:如果数组中存在相邻且值相同的数字,那么它们必须要么全部被选中,要么全部不被选中。
例如,对于数组 [1, 2, 2, 2, 5, 2],中间的三个 2 必须作为一个整体被选择或不被选择。(可以使用一个循环来确定相同值的连续范围。)
输入格式
输入包含一行,首先是一个整数 start (通常为 0,表示从数组的起始索引开始处理,但在此问题中,它可能只是一个占位符,实际处理时可以忽略或用于递归的起始索引),然后是一个整数数组 nums,最后是一个整数 target。
start[num1 num2 ... numN]target
输出格式
输出以如下格式输出到标准输出中。
boolean
样例
0 [2 4 8] 10
true
0 [1 2 4 8 1] 14
true
0 [2 4 4 8] 14
false
样例解释
- 样例 1: 数组
[2, 4, 8],目标和10。选择2和8,它们的和为10。满足条件,输出true。 - 样例 2: 数组
[1, 2, 4, 8, 1],目标和14。选择2、4和8,它们的和为14。满足条件,输出true。 - 样例 3: 数组
[2, 4, 4, 8],目标和14。- 如果选择两个
4,当前和为8,还需要14 - 8 = 6。从剩余的[2, 8]中无法得到6。 - 如果不选择两个
4,当前和为0,需要14。从剩余的[2, 8]中无法得到14(只能得到2,8,10)。 - 因此,无法找到满足条件的子集,输出
false。
- 如果选择两个
数据范围
每个测试用例的时间限制为 1 秒,内存限制为 1024 KiB。