j
jaryue
V1
2023/03/26阅读:12主题:默认主题
leetcode2395和相等的子数组
leecode2395
题目描述
给你一个下标从 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 。 注意即使子数组的元素相同,这两个子数组也视为不相同的子数组,因为它们在原数组中的起始位置不同。
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/find-subarrays-with-equal-sum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
法1
哈希表
-
建立map[int]bool;;int为和值,出现即为true,二次出现后返回true,
//int为和值,出现即为true,二次出现后返回true,
m := make(map[int]bool)
-
循环遍历数组和值并填充map中的值,如果已经为true则返回true 如果遍历完成都没有二次出现返回false
for i := 0; i < len(nums)-1; i++ {
if !m[nums[i]+nums[i+1]] {//为false即该为true表示出现过
m[nums[i]+nums[i+1]] = true
} else {
return true//二次出现直接返回真
}
}
return false//没有二次出现返回假
执行结果
法1
func findSubarrays(nums []int) bool {
//int为和值,出现即为true,二次出现后返回true,
m := make(map[int]bool)
for i := 0; i < len(nums)-1; i++ {
if !m[nums[i]+nums[i+1]] {//为false即该为true表示出现过
m[nums[i]+nums[i+1]] = true
} else {
return true//二次出现直接返回真
}
}
return false//没有二次出现返回假
}
执行用时: 0 ms , 在所有 Go 提交中击败了 100.00% 的用户 内存消耗: 2.3 MB , 在所有 Go 提交中击败了 50.00% 的用户 通过测试用例: 42 / 42
作者介绍
j
jaryue
V1