码迷,mamicode.com
首页 > 编程语言 > 详细

560.和为k的子数组

时间:2020-05-15 13:59:35      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:https   官方   problems   ==   次数   return   题解   i+1   map   

技术图片
技术图片

枚举

思路

  • 依次遍历以i为起点的所有子数组,判断各数组是否满足题设

代码

   /**
     *  375ms
     *  暴力题解
     */
    public int subarraySum(int[] nums, int k) {
        int len=nums.length;
        int ans=0;
        for(int i=0;i<len;i++){
            int sum=nums[i];
            if(sum==k){
                ans++;
            }
            for(int j=i+1;j<len;j++){
                sum+=nums[j];
                if(sum==k){
                    ans++;
                }
            }
        }
        return ans;
    }
  • 时间复杂度 O(n^2) 空间复杂度O(1)

前缀和 + 哈希表优化

官方思路

技术图片
技术图片

代码

   /**
     * 22ms
     * 前缀和  哈希表优化
     */
    public int subarraySum2(int[] nums,int k){
        int count=0,pre=0;
        Map<Integer,Integer> map=new HashMap<>();
        map.put(0, 1);  //<k,v> == <preSum(包含当前点),出现的次数>
        for(int i=0;i<nums.length;i++){
            pre+=nums[i];
            if(map.containsKey(pre-k)){
                count+=map.get(pre-k);
            }
            map.put(pre, map.getOrDefault(pre, 0)+1);
        }
        return count;
    }

560.和为k的子数组

标签:https   官方   problems   ==   次数   return   题解   i+1   map   

原文地址:https://www.cnblogs.com/yh-simon/p/12894244.html

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