欢迎光临散文网 会员登陆 & 注册

2395. 和相等的子数组

2023-02-05 19:05 作者:目标力扣Knight  | 我要投稿

2395. 和相等的子数组

对读者的要求

  1. 了解与理解集合的概念

  2. 知道两层for循环

题意简述

寻找数组中,两对连续一个子数组,其和相等;

数组长度大于2且小于1000;

方法一:双指针

遍历数组中的每一个数组,从位序1开始取元素,到 nums 数组减一的位序截止, 取得一对连续长度为2的子数组。枚举每一对子数组即可;

可以特判,即使在两个子数组,第一个子数组第二个元素和第二个子数组的第一个元素重合的情况下,整个数组的长度至少为3;

Python版本

C++版本


复杂度分析

  • 时间复杂度:O(N ^ 2)。此处的 n 是数组 nums的长度;

  • 空间复杂度: O(1)。


方法二:集合

题目要求从数组 nums中找出一对子数组之和相等的数对即可。考虑最坏情况,数组中恰好有两个数字相等,且这两个数字中间还有一个数,作为它俩子数组的交集;

我们可以判断,nums数组中只要有三个数字满足以上的条件即可满足题意。因此数组的元素在去掉重复之后,最多有 n - 1 个元素。

Python版本

C++版本


复杂度分析

  • 时间复杂度: O(N)。 此处的 n 指的是 数组 nums的长度。

  • 空间复杂度:O(N)。 最坏情况下数组元素各异,找不到满足题意的子数组,集合存储了所有 nums中的数字。

备注

  • 对于第二种思路,试想,作为加数的分别作为两个子数组的两个加数各不相同,和必定不同。转换思路,找存在相同的两个数字,这种思路比较精巧;

  • 函数说明:Python3.10提供支持,用于生成连续两个元素组合,样例如下:




2395. 和相等的子数组的评论 (共 条)

分享到微博请遵守国家法律