LeetCode LCR 011. 连续数组

题目描述

LCR 011. 连续数组

思路分析

解法一:前缀和 + 哈希表(推荐)

核心思路

  • 将 0 视为 -1,1 视为 +1,求前缀和。
  • 若两位置前缀和相同,说明区间内 0 与 1 数量相等。
  • 使用哈希表记录前缀和首次出现的位置,更新最长长度。

复杂度分析

  • 时间复杂度:O(n),其中 n 表示数组长度。
  • 空间复杂度:O(n),其中 n 表示哈希表大小。
// 前缀和 + 哈希表
class Solution {
    public int findMaxLength(int[] nums) {
        Map<Integer, Integer> firstIndex = new HashMap<>();
        firstIndex.put(0, -1);

        int sum = 0;
        int ans = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += (nums[i] == 1) ? 1 : -1;
            if (firstIndex.containsKey(sum)) {
                ans = Math.max(ans, i - firstIndex.get(sum));
            } else {
                firstIndex.put(sum, i);
            }
        }

        return ans;
    }
}
// 前缀和 + 哈希表
func findMaxLength(nums []int) int {
	firstIndex := make(map[int]int)
	firstIndex[0] = -1

	sum := 0
	ans := 0
	for i, v := range nums {
		if v == 1 {
			sum++
		} else {
			sum--
		}
		if idx, ok := firstIndex[sum]; ok {
			if i-idx > ans {
				ans = i - idx
			}
		} else {
			firstIndex[sum] = i
		}
	}

	return ans
}

相似题目

题目 难度 考察点
560. 和为 K 的子数组 中等 前缀和
523. 连续的子数组和 中等 前缀和
974. 和可被 K 整除的子数组 中等 前缀和
1248. 统计「优美子数组」 中等 前缀和
930. 和相同的二元子数组 中等 前缀和
325. 和等于 k 的最长子数组长度 中等 前缀和
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/83305033
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!