列表

详情


2395. 和相等的子数组

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

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

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

 

示例 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 。
注意即使子数组的元素相同,这两个子数组也视为不相同的子数组,因为它们在原数组中的起始位置不同。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool findSubarrays(vector<int>& nums) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 2.3 MB, 提交时间: 2022-09-15 23:21:38

func findSubarrays(nums []int) bool {
	vis := map[int]bool{}
	for i := 1; i < len(nums); i++ {
		s := nums[i-1] + nums[i]
		if vis[s] {
			return true
		}
		vis[s] = true
	}
	return false
}

python3 解法, 执行用时: 40 ms, 内存消耗: 15 MB, 提交时间: 2022-09-15 23:21:04

class Solution:
    def findSubarrays(self, nums: List[int]) -> bool:
        '''
        pairwise(iterable): 返回从输入 iterable 中获取的连续重叠对
        '''
        return len(set(map(sum, itertools.pairwise(nums)))) < len(nums) - 1

python3 解法, 执行用时: 28 ms, 内存消耗: 15 MB, 提交时间: 2022-09-15 23:17:34

class Solution:
    def findSubarrays(self, nums: List[int]) -> bool:
        '''
        因为子列表长度为2,所以就是相邻两个元素组成的列表,考虑相邻两元素相加之和有无重复即可
        '''
        n, s = len(nums), set()
        for i in range(0, n-1):
            m = nums[i] + nums[i+1]
            if m in s:
                return True
            else:
                s.add(m)
        return False

上一题