用java实现给定一个数组,找出其中不含有重复数字的最长子数组的长度。
时间: 2024-09-22 19:08:47 浏览: 47
在 Java 中,你可以使用滑动窗口(Sliding Window)算法来解决这个问题。滑动窗口是一种常见的数据结构操作技巧,可以用于查找数组中满足特定条件的最大连续子序列。这里的主要思路是维护两个指针,一个指向窗口的起始位置(left),另一个指向窗口的结束位置(right)。我们遍历数组,每次移动右指针,同时检查窗口内的元素是否都互不相同。如果不相同,我们就继续扩大窗口;如果出现重复,就缩小窗口直到重复元素不再出现。
下面是具体的 Java 代码实现:
```java
import java.util.HashSet;
public class LongestSubarrayWithoutDuplicates {
public static int lengthOfLongestSubstring(int[] nums) {
if (nums == null || nums.length == 0) return 0;
HashSet<Integer> set = new HashSet<>();
int left = 0, maxLen = 0;
for (int right = 0; right < nums.length; right++) {
while (set.contains(nums[right])) { // 如果右边界处有重复,缩小左边界
set.remove(nums[left]);
left++;
}
set.add(nums[right]); // 将新元素添加到集合中
maxLen = Math.max(maxLen, right - left + 1); // 更新最长子串长度
}
return maxLen;
}
public static void main(String[] args) {
int[] nums = {1, 2, 1, 3, 2, 5};
System.out.println(lengthOfLongestSubstring(nums)); // 输出: 4
}
}
```
在这个代码中,`lengthOfLongestSubstring` 函数接收一个整数数组作为参数,返回无重复数字的最长子数组的长度。函数内部通过维护一个哈希集 `set` 来跟踪当前窗口内唯一的元素,利用 `left` 指针来控制窗口范围的收缩。
阅读全文