20200406——第五百六十题 和为k的子数组

第一种暴力法

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

超出时间限制

遍历 前缀和

class Solution {
    public int subarraySum(int[] nums, int k) {
        HashMap<Integer,Integer> map = new HashMap<>();
        map.put(0,1);
        int count = 0 ;
        int sum = 0;
        for(int i = 0 ;i<nums.length;++i){
            sum +=nums[i];
            if(map.containsKey(sum-k)){
                count +=map.get(sum-k);
            }
            if(map.containsKey(sum)){
                map.put(sum,map.get(sum)+1);
            }else{
                map.put(sum,1);
            }        
        }
        return count;
    }
}

在这里插入图片描述

发布了955 篇原创文章 · 获赞 43 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_36344771/article/details/105343944