P525 连续数组
题目
分析
- 关键词检索:最长连续子数组,又到了喜闻乐见的前缀和哈希表环节
- 0,1个数相等,如果将0转化为-1,它们的和将为0,将题目转化为求和为零的最大连续子数组
- 在map中先放入(0,-1),我们认为前0项和为0,位于-1(常规操作啦)
- 遍历数组,用一个变量保存当前的前n项和,遇到0视为-1
- 如果在map中找到key = 当前前n项和,那就说明从map中取出的index+1到i的数组和为零(有相同个0,1)
显然,如果两个连续子数组和相等,而且是包含关系,那么大的数组减去小的数组后的和为0
- 这个子数组的长度可以用i-index来计算出
- 如果找不到就将当前的前n项和以及索引加入map,因为要找最大的连续子数组,所以没必要更新
题解
1 |
|
一点屁话
- 感觉每次做这类题都差点感觉
- 还是做得少