classSolution{publicintsubarraySum(int[] nums,int k){int ans =0;if(nums.length ==0)return ans;if(nums.length ==1){if(nums[0]==k)return1;return0;}int right =0;int left =0;int sum = nums[left];while(right < nums.length && left < nums.length){if(sum<k){if(nums[left]<0&& left<right){
sum -= nums[left++];}else{if(right < nums.length-1){
right++;
sum += nums[right];}else{break;}}}elseif(sum>k){if(nums[left]<0){if(right < nums.length-1){
right++;
sum += nums[right];}else{break;}}else{
sum -= nums[left++];}}else{
ans++;
sum -= nums[left++];}}return ans;}}
题解做法:声明一个数组记录前缀和,左右指针相减,就是连续数字的和。
publicclassSolution{publicintsubarraySum(int[] nums,int k){int len = nums.length;// 计算前缀和数组int[] preSum =newint[len +1];
preSum[0]=0;for(int i =0; i < len; i++){
preSum[i +1]= preSum[i]+ nums[i];}int count =0;for(int left =0; left < len; left++){for(int right = left; right < len; right++){// 区间和 [left..right],注意下标偏移if(preSum[right +1]- preSum[left]== k){
count++;}}}return count;}}
作者:liweiwei1419
链接:https://leetcode-cn.com/problems/subarray-sum-equals-k/solution/bao-li-jie-fa-qian-zhui-he-qian-zhui-he-you-hua-ja/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。