[每日一题]2395.和相等的子数组

2395. 和相等的子数组 给你一个下标从 0 开始的整数数组 nums ,判断是否存在 两个 长度为 2 的子数组且它们的 相等。注意,这两个子数组起始位置的下标必须 不相同

如果这样的子数组存在,请返回 true,否则返回 false

子数组 是一个数组中一段连续非空的元素组成的序列。

输入:nums = [4,2,4] 输出:true 解释:元素为 [4,2] 和 [2,4] 的子数组有相同的和 6 。

输入:nums = [0,0,0] 输出:true 解释:子数组 [nums[0],nums[1]] 和 [nums[1],nums[2]] 的和相等,都为 0 。 注意即使子数组的元素相同,这两个子数组也视为不相同的子数组,因为它们在原数组中的起始位置不同。

提示:

  • 2 <= nums.length <= 1000
  • -10 9 <= nums[i] <= 10 9

Solutions

class Solution {
    public boolean findSubarrays(int[] nums) {
        Map<Integer,Integer>map = new HashMap<>();
        for(int i = 0;i < nums.length - 1;i++){
            if(map.containsKey(nums[i] + nums[i + 1])){
                if(i >= map.get(nums[i] + nums[i + 1])){
                    return true;
                }
            }
            map.put(nums[i] + nums[i + 1],i);
        }
        return false;
    }
}

Ideas

  • 哈希表

    我们可以遍历数组 nums,用哈希表 vis 记录数组中每两个相邻元素的和,如果当前两个元素的和已经在哈希表中出现过,则返回 true,否则将当前两个元素的和加入哈希表中。

    遍历结束后,说明没有找到满足条件的两个子数组,返回 false。