题目地址
https://leetcode.com/problems/continuous-subarray-sum/
题目描述
523. Continuous Subarray Sum
Given an integer array nums and an integer k, return true if nums has a continuous subarray of size at least two whose elements sum up to a multiple of k, or false otherwise.
An integer x is a multiple of k if there exists an integer n such that x = n * k. 0 is always a multiple of k.
Example 1:
Input: nums = [23,2,4,6,7], k = 6
Output: true
Explanation: [2, 4] is a continuous subarray of size 2 whose elements sum up to 6.
Example 2:
Input: nums = [23,2,6,4,7], k = 6
Output: true
Explanation: [23, 2, 6, 4, 7] is an continuous subarray of size 5 whose elements sum up to 42.
42 is a multiple of 6 because 42 = 7 * 6 and 7 is an integer.
Example 3:
Input: nums = [23,2,6,4,7], k = 13
Output: false
思路
- 前缀和.
- 同余定理: subNum % k == 0,等价于 sum[j+1] % k == sum[i] % k.
关键点
代码
- 语言支持:Java
class Solution {
public boolean checkSubarraySum(int[] nums, int k) {
int n = nums.length;
int[] sums = new int[n + 1];
for (int i = 1; i <= n; i++) {
sums[i] = sums[i - 1] + nums[i - 1];
}
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i <= n; i++) {
int sumMod = sums[i] % k;
if (map.containsKey(sumMod) && i > map.get(sumMod) + 1) {
return true;
}
map.putIfAbsent(sumMod, i);
}
return false;
}
}
网友评论