See: https://leetcode.com/problems/continuous-subarray-sum/description/
C++:
method one:
class Solution { public: bool checkSubarraySum(vector<int>& nums, int k) { for (int i = 0; i < nums.size(); ++i) { int sum = nums[i]; for (int j = i + 1; j < nums.size(); ++j) { sum += nums[j]; if (sum == k) { return true; } if (k != 0 && sum % k == 0) { return true; } } } return false; } };
Method Two:
class Solution { public: bool checkSubarraySum(vector<int>& nums, int k) { int n = nums.size(), sum = 0, pre = 0; unordered_set<int> st; for (int i = 0; i < n; ++i) { sum += nums[i]; int t = (k == 0) ? sum : (sum % k); if (st.count(t)) { return true; } st.insert(pre); pre = t; } return false; } };
Reference: http://www.cnblogs.com/grandyang/p/6504158.html