上海网站建设红旗,政务公开 加强门户网站建设,wordpress5.6.20,晋城企业网站建设560. 和为 K 的子数组
解题思路
创建一个前缀和数组 preSum#xff0c;其长度比原数组 nums 多 1。preSum[i] 表示 nums 中前 i 个元素的和。通过遍历 nums 数组#xff0c;计算前缀和数组 preSum。 在嵌套的两个循环中#xff0c;对所有可能的子数组进行穷举#xff1a;…560. 和为 K 的子数组
解题思路
创建一个前缀和数组 preSum其长度比原数组 nums 多 1。preSum[i] 表示 nums 中前 i 个元素的和。通过遍历 nums 数组计算前缀和数组 preSum。 在嵌套的两个循环中对所有可能的子数组进行穷举外层循环从 1 到 nn 是数组长度代表子数组的结束位置。内层循环从 0 到 i-1代表子数组的起始位置。 在每一对起始位置和结束位置上通过计算前缀和数组中的差值判断子数组的和是否等于 k。如果等于 k则将结果计数器 ans 加一。
class Solution {public int subarraySum(int[] nums, int k) {// 前缀和数组int n nums.length;int[] preSum new int[n 1]; preSum[0] 0;for(int i 0; i n; i){preSum[i 1] preSum[i] nums[i];}// preSum[i] 代表nums[0...i - 1]的和int ans 0;// 穷举所有子数组for(int i 1; i n; i){for(int j 0; j i; j){if(preSum[i] - preSum[j] k){ans;}}}return ans;}
}