剑指offer-010-和为k的子数组
Posted zhixuChen200
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-010-和为k的子数组相关的知识,希望对你有一定的参考价值。
目录标题
题目
给定一个整数数组和一个整数
k
**,**请找到该数组中和为k
的连续子数组的个数。示例 1:
输入:nums = [1,1,1], k = 2
输出: 2
解释: 此题 [1,1] 与 [1,1] 为两种不同的情况
示例 2:输入:nums = [1,2,3], k = 3
输出: 2
思路
1.先求出从第一个整数,到数字最后一个数的子数组之和,记为数组z[ ],这样任意两个数的子数组之和即为z[i]-z[j]。
2.通过遍历数组z[]就可以知道出现了和为k的子数组出现了几次。
代码
class Solution
public int subarraySum(int[] nums, int k)
int[] z = new int[nums.length];
z[0] = nums[0];
for (int i = 1; i < nums.length; i++)
z[i] = z[i - 1] + nums[i];
int num = 0;
for (int i = z.length - 1; i >= 0; i--)
if(z[i] == k)
num++;
for (int j = i - 1; j >= 0; j--)
if (z[i] - z[j] == k)
num++;
return num;
以上是关于剑指offer-010-和为k的子数组的主要内容,如果未能解决你的问题,请参考以下文章