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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
LeetCode第560题:和为K的子数组(中等)题目:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。解题思路:想使用双指针的方法,通过和的大小,控制指针的移动。但是为了降低时间复杂度,我左右两个指针都不固定,这就导致了遗漏的问题。class Solution { public int subarraySum(int[] nums, int k) { int ans = 0; if(nums.length == 0) r