zoukankan      html  css  js  c++  java
  • leetcode560 和为K的子数组(Medium)

    题目来源: leetcode560 和为K的子数组

    题目描述:

    给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。

    示例 1 :

    输入:nums = [1,1,1], k = 2
    输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。

    说明 :
    数组的长度为 [1, 20,000]。
    数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。

    解题思路:

    设区间[left,right]的和为k,sum是前缀和,则k=sum[right]-sum[left-1],那么sum[left-1]=sum[right]-k。
    那么遍历nums数组,求其前i项和sum,再判断sum-k是否是某个位置的前n项和,通过哈希表保存。如果是的话则结果+1。

    class Solution {
    public:
        int subarraySum(vector<int>& nums, int k) {
            int n=nums.size();
            unordered_map<int,int> m;
            int sum=0,ans=0;
            m[0]=1;
            for(int i=0;i<nums.size();i++){
                sum+=nums[i];
                if(m.find(sum-k)!=m.end()) ans+=m[sum-k];
                m[sum]++;
            }
            return ans;
        }
    };
    
  • 相关阅读:
    url 记录
    tvm
    const flold
    spring
    java连接mysql数据库
    linux常用命令记录
    pikachu漏靶场洞测试
    Starting.....
    IOS App提交流程
    InApp Purchase(iap)快速指南
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13452318.html
Copyright © 2011-2022 走看看