給你一個整數(shù)數(shù)組 nums 和一個整數(shù) k 糊肤,編寫一個函數(shù)來判斷該數(shù)組是否含有同時滿足下述條件的連續(xù)子數(shù)組:
子數(shù)組大小 至少為 2 ,且
子數(shù)組元素總和為 k 的倍數(shù)慕趴。
如果存在湿故,返回 true 惊完;否則堕澄,返回 false 邀跃。
如果存在一個整數(shù) n ,令整數(shù) x 符合 x = n * k 蛙紫,則稱 x 是 k 的一個倍數(shù)拍屑。
示例 1:
輸入:nums = [23,2,4,6,7], k = 6
輸出:true
解釋:[2,4] 是一個大小為 2 的子數(shù)組,并且和為 6 坑傅。
示例 2:
輸入:nums = [23,2,6,4,7], k = 6
輸出:true
解釋:[23, 2, 6, 4, 7] 是大小為 5 的子數(shù)組僵驰,并且和為 42 。
42 是 6 的倍數(shù)唁毒,因為 42 = 7 * 6 且 7 是一個整數(shù)蒜茴。
示例 3:
輸入:nums = [23,2,6,4,7], k = 13
輸出:false
Java代碼:
class Solution {
public boolean checkSubarraySum(int[] nums, int k) {
Set<Integer> s = new HashSet();
if(nums == null || nums.length==0)
return false;
int sum = 0, lastSum = 0;
for(int i=0;i<nums.length;i++){
sum += nums[i];
if(k!=0) //求余數(shù)
sum%=k;
//兩次余數(shù)相同,則他們的差即可被k整除
if(s.contains(sum)){
return true;
}else
s.add(lastSum); //保證數(shù)組的連續(xù)子數(shù)組大小至少為2
lastSum = sum;
}
return false;
}
}