🌈 Scala 实现
题目描述:
- 有N个正整数组成的一个序列,给定一个整数sum
- 求长度最长的的连续子序列使他们的和等于sum
- 返回次子序列的长度,如果没有满足要求的序列 返回-1
备注:
- 输入序列仅由数字和英文逗号构成,数字之间采用英文逗号分割
- 序列长度 1<=N<=200,输入序列不考虑异常情况
- 由题目保证输入序列满足要求
示例
输入:
- 1,2,3,4,2
- 6
输出:
- 3
解析:
- 1,2,3和4,2两个序列均能满足要求,所以最长的连续序列为1,2,3 因此结果为3
输入:
- 1,2,3,4,2
- 20
输出:
- -1
解释:
- 没有满足要求的子序列,返回-1
代码:
def main(args: Array[String]): Unit = {
// 获取输入
val elems = StdIn.readLine().split(",").map(_.toInt).toList
val sum = StdIn.readLine().toInt
// 声明变量
var tmp = 0
var maxLen = -1
//计算 maxLen
for (i <- elems.indices) {
tmp += elems(i)
// 连续增加后面的数,如果大于sum则跳出,如果等于sum则重置maxLen
breakable {
for (j <- i + 1 until elems.length) {
tmp += elems(j)
// 跳出循环
if (tmp > sum) break
// 重置maxLen
if (tmp == sum) {
maxLen = Math.max(maxLen, j - i + 2)
break
}
// 如果找不到就置为-1
maxLen = -1
}
}
// 重置tmp
tmp = 0
}
// 输出结果
println(maxLen)
}
❤️ END ❤️