📌  相关文章
📜  由数组中的唯一元素组成的最长子数组(1)

📅  最后修改于: 2023-12-03 15:11:20.155000             🧑  作者: Mango

由数组中的唯一元素组成的最长子数组

给定一个整数数组,找出由数组中的唯一元素组成的最长子数组,并返回该子数组的长度。

示例

输入: [1,2,3,2,1]

输出: 3

解释: 最长的唯一元素子数组是 [1,2,3]。

解决方法

我们可以使用滑动窗口来解决该问题,具体步骤如下:

  1. 定义两个指针 left 和 right,初始值都为 0。
  2. 定义一个 HashSet,用于存储当前窗口中的元素。
  3. 当窗口中的元素不重复时,右指针 right 向右移动,并将元素添加到 HashSet 中。
  4. 当窗口中的元素重复时,左指针 left 向右移动,同时将最左边的元素从 HashSet 中删去。
  5. 每一次移动指针,都要更新当前子数组的长度,取最大值。

代码如下:

public int findMaxSubArray(int[] nums) {
    int left = 0, right = 0;
    int maxLen = 0;
    HashSet<Integer> set = new HashSet<>();
    while (right < nums.length) {
        if (set.contains(nums[right])) {
            set.remove(nums[left]);
            left++;
        } else {
            set.add(nums[right]);
            right++;
            maxLen = Math.max(maxLen, set.size());
        }
    }
    return maxLen;
}

时间复杂度:O(n),其中 n 是数组的长度。

总结

滑动窗口是一种非常常见的算法思想,能够解决很多数组和字符串相关的问题。掌握这种思想,对于算法面试和实际开发都有很大的帮助。