560. Subarray Sum Equals K

1、題目數組

  一、審題 spa

   

 

  二、分析code

    給定一個整形數組。若存在連續的序列相加和爲 k ,統計這樣的序列的個數。blog

 

2、解答get

  方法1、class

    時間複雜度: O(N^2),空間複雜度:O(1)循環

    ① 將所給數組 nums,連續元素相加。 nums[i] 表明下標 i 及i以前的元素之和。遍歷

    ② 採用 count 記錄知足的序列個數。方法

    ③ 採用循環遍歷數組 nums,若 nums[i] == K。 則 count++。 採用內循環,若 nums[j] - nums[i] == k ,則 count++im

    ④ 返回 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;
    }

 

  方法2、

    採用一個 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;
    }
相關文章
相關標籤/搜索