難度中等107
給定一個包含非負數的數組和一個目標整數 k,編寫一個函數來判斷該數組是否含有連續的子數組,其大小至少爲 2,總和爲 k 的倍數,即總和爲 n*k,其中 n 也是一個整數。
示例 1:
輸入: [23,2,4,6,7], k = 6 輸出: True 解釋: [2,4] 是一個大小爲 2 的子數組,並且和爲 6。
示例 2:
輸入: [23,2,6,4,7], k = 6 輸出: True 解釋: [23,2,6,4,7]是大小爲 5 的子數組,並且和爲 42。
解題思路,求出前i項的前綴和,然後用一個j進行區間劃分進行遍歷
class Solution {
public boolean checkSubarraySum(int[] nums, int k) {
int sum = 0;
int [] curSum = new int[nums.length+1];
for(int i = 0;i<nums.length;i++){
sum += nums[i];
curSum[i+1] = sum;
}
for(int i = 0;i<curSum.length;i++){
for(int j = i+2;j<curSum.length;j++){
int temp = curSum[j] - curSum[i];
if((temp == 0 && k == 0) || (k != 0 && temp % k == 0)){
return true;
}
}
}
return false;
}
}
解題思路二:我用dp數組存儲每一種可能。然後遍歷,但是有錯,希望大家糾正