码迷,mamicode.com
首页 > 其他好文 > 详细

560. Subarray Sum Equals K

时间:2019-05-28 12:47:22      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:put   元素   相加   +=   题目   pre   class   统计   方法   

一、题目

  1、审题 

   技术图片

 

  2、分析

    给定一个整形数组。若存在连续的序列相加和为 k ,统计这样的序列的个数。

 

二、解答

  方法一、

    时间复杂度: O(N^2),空间复杂度:O(1)

    ① 将所给数组 nums,连续元素相加。 nums[i] 代表下标 i 及i之前的元素之和。

    ② 采用 count 记录满足的序列个数。

    ③ 采用循环遍历数组 nums,若 nums[i] == K。 则 count++。 采用内循环,若 nums[j] - nums[i] == k ,则 count++

    ④ 返回 count

    public int subarraySum(int[] nums, int k) {
        int count = 0;
        for (int i = 1; i < nums.length; i++) 
            nums[i] += nums[i - 1];
        
        for (int i = 0; i < nums.length; i++) {
            if(nums[i] == k)
                count++;
            for (int j = i + 1; j < nums.length; j++) {
                if(nums[j] - nums[i] == k)
                    count++;
            }
        }
        return count;
    }

 

  方法二、

    采用一个 Map 存储。 key=sum, value=count;

    时间复杂度:O(N); 空间复杂度:O(N)

    

    public int subarraySum2(int[] nums, int k) {
        int sum = 0, result = 0;
        HashMap<Integer, Integer> preSum = new HashMap<>();
        preSum.put(0, 1);
        
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            result += preSum.getOrDefault(sum - k, 0);
            preSum.put(sum, preSum.getOrDefault(sum, 0) + 1);
        }
        
        return result;
    }

 

560. Subarray Sum Equals K

标签:put   元素   相加   +=   题目   pre   class   统计   方法   

原文地址:https://www.cnblogs.com/skillking/p/10936383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!