思路:

令sum[p]表示p位置的前缀和。如果sum[i] % k == sum[j] % k (j - i > 1),则存在子段(i, j]的和能够整除k。

实现:

 1 class Solution 
 2 {
 3 public:
 4     bool checkSubarraySum(vector<int>& nums, int k) 
 5     {
 6         if (nums.size() < 2) return false;
 7         int n = nums.size();
 8         for (int i = 0; i < n - 1; i++)
 9             if (nums[i] == 0 && nums[i + 1] == 0)
10                 return true;
11         if (k == 0) return false;
12         int sum = 0;
13         unordered_map<int, int> m;
14         m[0] = -1;
15         for (int i = 0; i < n; i++)
16         {
17             sum = (sum + nums[i]) % k;
18             if (m.count(sum))
19             {
20                 if (i - m[sum] > 1)
21                     return true;
22             }
23             else m[sum] = i;
24         }
25         return false;
26     }
27 };

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-07
  • 2022-01-20
  • 2022-12-23
  • 2021-08-16
猜你喜欢
  • 2022-12-23
  • 2021-04-14
  • 2021-05-21
  • 2021-06-09
  • 2021-08-28
  • 2021-06-27
相关资源
相似解决方案