一、题目
给你一个下标从 0 开始的整数数组 nums ,判断是否存在两个长度为 2 的子数组且它们的和相等。注意,这两个子数组起始位置的下标必须 不相同 。
如果这样的子数组存在,请返回 true,否则返回 false 。
子数组是一个数组中一段连续非空的元素组成的序列。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-subarrays-with-equal-sum/description/
二、C++解法
我的思路及代码
采用哈希表才存储每两个的子数组的和,当遇到两个子数组的和在哈希表中重复出现的时候就说明存在两个长度为 2 的子数组且它们的和相等
class Solution {
public:
bool findSubarrays(vector<int>& nums) {
unordered_set<int> set;
for(int i=1;i<nums.size();i++){
if(set.count(nums[i-1]+nums[i]))
return true;
else set.insert(nums[i-1]+nums[i]);
}
return false;
}
};
- 时间复杂度:O(n),其中 n 是数组 nums 的长度
- 空间复杂度:O(n)。即为哈希表需要使用的空间
官方参考代码
class Solution {
public:
bool findSubarrays(vector<int>& nums) {
int n = nums.size();
unordered_set<int> seen;
for (int i = 0; i < n - 1; ++i) {
int sum = nums[i] + nums[i + 1];
if (seen.count(sum)) {
return true;
}
seen.insert(sum);
}
return false;
}
};
- 时间复杂度:O(n),其中 n 是数组 nums 的长度
- 空间复杂度:O(n)。即为哈希表需要使用的空间