zoukankan      html  css  js  c++  java
  • [leetcode 560. Subarray Sum Equals K]

    Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.

    Example 1:

    Input:nums = [1,1,1], k = 2
    Output: 2
    

    Note:

    1. The length of the array is in range [1, 20,000].
    2. The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7].

    Subscribe to see which companies asked this question.

    Show Tags
    Show Similar Problems
     

    笨方法就是遍历所有子序列,由于起点和终点都要遍历,所以时间复杂度是O(n^2)

    本次的方法是遍历所有起点是最开始元素的子序列,我们起名叫sum[i],只要两个sum[i]的差值是k,则两个i作为起点和终点的子序列就符合要求。由于起点就是最开始元素,只需遍历终点,时间复杂度为O(n)。

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

      

  • 相关阅读:
    Gin+Gorm小项目
    python实现监控信息收集
    Vue引入Stylus
    Go搭建一个Web服务器
    saltstack高效运维
    04-01 Django之模板层
    03-01 Django之视图层
    02-01 Django之路由层
    HTTP协议
    01-01 Web应用
  • 原文地址:https://www.cnblogs.com/stAr-1/p/6817838.html
Copyright © 2011-2022 走看看