zoukankan      html  css  js  c++  java
  • LeetCode 每日一题 560. 和为K的子数组

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

    示例 1 :

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

    说明 :

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/subarray-sum-equals-k
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    前缀和找差分为 k 即可,用 map 或者 unordered_map 均可。

    #pragma GCC optimize("O3")
    #pragma G++ optimize("O3")
    
    class Solution {
     public:
      int subarraySum(vector<int>& nums, int k) {
        const int n = nums.size();
        unordered_map<int, int>g;
        int s(0);
        int ans(0);
        g[0]++;
        for(int i = 0; i < n; ++i) {
          s += nums[i];
          ans += g[s - k];
          g[s]++;
        }
        return ans;
      }
    };
    
  • 相关阅读:
    js 那些事二 javascript中的闭包理解
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java入门
    Java入门
    Java入门
  • 原文地址:https://www.cnblogs.com/Forgenvueory/p/12892972.html
Copyright © 2011-2022 走看看