题目链接:
我的答案:
直接枚举遍历
class Solution {
public:
bool findSubarrays(vector<int>& nums) {
for (int i = 0; i < nums.size() - 2; i++) {
for (int j = i + 1; j <= nums.size() - 2; j++){
if ((nums[i] + nums[i + 1]) == (nums[j] + nums[j + 1]))
return 1;
}
}
return 0;
}
};
其他方法:
题解给出的其他方法用到了哈希表
复习一下哈希表
哈希表
参考文章:(3条消息) C++ 哈希表_c++哈希表_ZS_Wang_Blogs的博客-CSDN博客
unordered_set语法
参考文章:(3条消息) C++常用语法——unordered_set_unorderedset头文件_还没想好~的博客-CSDN博客
方法一
哈希表存入两数之和,如果该和之前存过,说明有相同的和,返回true;否则将该和存入哈希表
class Solution {
public:
bool findSubarrays(vector<int>& nums) {
unordered_set<int> st;
for(int i = 0; i < nums.size() - 1; i++) {
if(st.find(nums[i] + nums[i + 1]) != st.end()) //find()函数未找到会返回end()
//如果找到
return true;
//未找到,存入这个和
st.insert(nums[i] + nums[i + 1]);
}
return false;
}
};
方法二
直接将全部的两数之和存入哈希表,哈希表会自动去重,通过计算哈希表里存的元素的个数即可判断
class Solution {
public:
bool findSubarrays(vector<int>& nums) {
unordered_set<int> st;
for(int i = 0; i < nums.size() - 1; i++) {
//直接存入,重复元素哈希表会自动去重
st.insert(nums[i] + nums[i + 1]);
}
return st.size() != (nums.size() - 1);
//如果哈希表里的元素个数不是n-1,说明有重复,返回true;否则false
}
};