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

哈希表

  1. 建立map[int]bool;;int为和值,出现即为true,二次出现后返回true,
//int为和值,出现即为true,二次出现后返回true,
 m := make(map[int]bool)
  1. 循环遍历数组和值并填充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

分类:

后端

标签:

Golang

作者介绍

j
jaryue
V1