文章目录
- 阿里巴巴找黄金宝箱(V)
- 题目描述
- 输入描述
- 输出描述
- 示例代码
阿里巴巴找黄金宝箱(V)
题目描述
一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字。
阿里巴巴念出一个咒语数字k(k<N),找出连续k个宝箱数字和的最大值,并输出该最大值。
输入描述
第一行输入一个数字字串,数字之间使用逗号分隔,例如:2,10,-3,-8,40,5
- 1 ≤ 字串中数字的个数 ≤ 100000
- -10000 ≤ 每个数字 ≤ 10000
输出描述
连续k个宝箱数字和的最大值,例如:39
用例
输入 | 2,10,-3,-8,40,5 4 |
输出 | 39 |
说明 | 无 |
输入 | 8 1 |
输出 | 8 |
说明 | 无 |
题目解析
- 要连续k个宝箱数字和的最大值,可以采用滑动窗口来解决
1.1.定义两个指针,先求两个指针之间的和
1.2 两个指针右移,前面的和减掉移出去的(左侧),加上移入的(右侧),这样便得到下一个连续K区间的和。再用比较的方式,如果这个区间和比之前的大,那么就记录,否则继续右移- 具体逻辑可以代码
示例代码
import java.util.Scanner;
public class T67 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String strArr[] = input.split(",");
int nums[] = new int[strArr.length];
for (int i = 0; i < strArr.length; i++) {
nums[i] = Integer.parseInt(strArr[i]);
}
int num = sc.nextInt();
int left = 0;
int right = num - 1;
int tempSum = 0;
for (int i = left; i <= right; i++) {
tempSum += nums[i];
}
int max = tempSum;
// 右移
while (right < nums.length - 1) {
tempSum -= nums[left++];
tempSum += nums[++right];
if (tempSum > max)
max = tempSum;
}
System.out.println(max);
}
}
代码运行截图