題目
一貧如洗的樵夫阿里巴巴在去砍柴的路上,無意中發現了強盜集團的藏寶地,藏寶地有編號從0-N的箱子,每個箱子上面貼有一個數字.阿里巴巴念出一個咒語數字k(k<N),找出連續k個寶箱數字和的最大值,并輸出該最大值。
輸入描述
第一行輸入一個數字字串,數字之間使用逗號分隔,例如: 2,10,-3,-8,40,5。
1<=字串中數字的個數<100000
-10000<=每個數字<=10000
第二行輸入咒語數字,例如: 4,咒語數字大小小于寶箱的個數
輸出描述
連續k個寶箱數字和的最大值,例如: 39
示例1:
輸入
2,10,-3,-8,40,5
4
輸出
39
示例2:
輸入
8
1
輸出
8
思路
求連續k個字符的最大和,使用滑動窗口遍歷即可。
題目沒有要求窗口內的數字不能重復,所以不用額外判斷
題解
package hwod;import java.util.Arrays;
import java.util.Scanner;public class FindGoldBox5 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] nums = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();int n = sc.nextInt();System.out.println(findGlodBox5(nums, n));}private static int findGlodBox5(int[] nums, int n) {int ans = -1, sum = 0;if (n > nums.length) return -1;for (int i = 0; i < n; i++) {sum += nums[i];}ans = sum;for (int j = n; j < nums.length; j++) {sum = sum + nums[j] - nums[j - n];ans = Math.max(ans, sum);}return ans;}
}
推薦
如果你對本系列的其他題目感興趣,可以參考華為OD機試真題及題解(JAVA),查看當前專欄更新的所有題目。