zoukankan      html  css  js  c++  java
  • 560.和为k的子数组

    image-20200515122724573

    枚举

    思路

    • 依次遍历以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)

    前缀和 + 哈希表优化

    官方思路

    image-20200515123425304

    代码

       /**
         * 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;
        }
    
  • 相关阅读:
    CVPR顶会热词统计
    @Annotation学习
    把一张表已有的数据对另一张表数据进行修改
    两张表数据不一致进行对比
    学习借鉴
    借鉴tcp
    借鉴tcp
    osi七层
    http学习
    Json学习
  • 原文地址:https://www.cnblogs.com/yh-simon/p/12894244.html
Copyright © 2011-2022 走看看