剑指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的子数组的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 560.和为k的子数组

《LeetCode之每日一题》:52.和为K的子数组

和为K的子数组--力扣

560. 和为 K 的子数组

560. 和为 K 的子数组

LeetCode-560. 和为 K 的子数组