📝个人主页:五敷有你
🔥系列专栏:算法分析与设计
⛺️稳中求进,晒太阳
题目
示例
示例 1:
输入:nums = [4,2,4] 输出:true 解释:元素为 [4,2] 和 [2,4] 的子数组有相同的和 6 。
示例 2:
输入:nums = [1,2,3,4,5] 输出:false 解释:没有长度为 2 的两个子数组和相等。
示例 3:
输入:nums = [0,0,0] 输出:true 解释:子数组 [nums[0],nums[1]] 和 [nums[1],nums[2]] 的和相等,都为 0 。 注意即使子数组的元素相同,这两个子数组也视为不相同的子数组,因为它们在原数组中的起始位置不同。
思路
我们只需要对数组进行一次遍历。当我们 i 个元素时,计算 nums[i]+nums[i+1] 的值,并判断该值是否已经出现过即可。
判断的操作可以使用一个哈希表,记录已经出现过的值。
代码实现
class Solution {
public boolean findSubarrays(int[] nums) {
int n=nums.length;
if(n<3){
return false;
}
Set<Integer> set=new HashSet();
for(int i=0;i<n-1;i++){
int sum = nums[i] + nums[i + 1];
if(!set.add(sum)){
return true;
}
}
return false;
}
}
运行结果
时间复杂度:O(n)。
空间复杂度:O(n)。