题目
给你一个整数数组nums和一个整数k,请你统计并返回该数组中和为k的子数组的个数。
子数组是数组中元素的连续非空序列。
示例 1:
输入:nums = [1,1,1], k = 2输出:2
示例 2:
输入:nums = [1,2,3], k = 3输出:2
提示:
1 <= nums.length <= 2 * 104-1000 <= nums[i] <= 1000-107 <= k <= 107
思路
因为是子数组,所以要确定两个数组的首位位置,使用sum变量进行动态累加
代码示例
import java.util.*; public class lc560 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str = scan.nextLine(); int k = scan.nextInt(); String[] split = str.substring(1, str.length() - 1).split(","); int[] arr = new int[split.length]; for (int i = 0; i < split.length; i++) { arr[i] = Integer.parseInt(split[i]); } lc560 sol = new lc560(); int res = sol.subarraySum(arr, k); System.out.println(res); } public int subarraySum(int[] nums, int k) { int res = 0; //两层for循环控制首尾数组位置,最后通过sum对k进行对比得出k总和 for (int i = 0; i < nums.length; i++) { int sum = 0; for (int j = i; j < nums.length; j++) { sum += nums[j]; if(sum == k){ res++; } } } return res; } }