当前位置: 面试刷题>> 合法数组 (经典算法题500道)


**题目描述补充**: 给定一个整数数组 `nums`,要求找出并返回所有可能的、长度至少为2的、且其中所有元素都是唯一的(即没有重复元素)的子数组。这些子数组必须是原数组 `nums` 的连续部分。 **示例**: 输入:`nums = [1, 2, 2, 3]` 输出:`[[1, 2], [1, 2, 3], [2, 3]]` 解释:`[1, 2]` 和 `[2, 3]` 是没有重复元素的子数组,且长度至少为2。`[1, 2, 2]` 不是有效输出,因为它包含重复元素。 **PHP 示例代码**: ```php function findSubarrays($nums) { $result = []; $n = count($nums); for ($i = 0; $i < $n - 1; $i++) { $seen = []; $temp = []; for ($j = $i; $j < $n; $j++) { if (!isset($seen[$nums[$j]])) { $seen[$nums[$j]] = true; $temp[] = $nums[$j]; if (count($temp) >= 2) { $result[] = $temp; } } else { break; // 发现重复元素,停止内层循环 } } } return $result; } // 测试 $nums = [1, 2, 2, 3]; $result = findSubarrays($nums); print_r($result); ``` **Python 示例代码**: ```python def find_subarrays(nums): result = [] n = len(nums) for i in range(n - 1): seen = set() temp = [] for j in range(i, n): if nums[j] not in seen: seen.add(nums[j]) temp.append(nums[j]) if len(temp) >= 2: result.append(temp[:]) # 使用[:]创建temp的副本 else: break # 发现重复元素,停止内层循环 return result # 测试 nums = [1, 2, 2, 3] result = find_subarrays(nums) print(result) ``` **JavaScript 示例代码**: ```javascript function findSubarrays(nums) { const result = []; const n = nums.length; for (let i = 0; i < n - 1; i++) { const seen = new Set(); const temp = []; for (let j = i; j < n; j++) { if (!seen.has(nums[j])) { seen.add(nums[j]); temp.push(nums[j]); if (temp.length >= 2) { result.push([...temp]); // 使用扩展运算符创建temp的副本 } } else { break; // 发现重复元素,停止内层循环 } } } return result; } // 测试 const nums = [1, 2, 2, 3]; const result = findSubarrays(nums); console.log(result); ``` **码小课提醒**: 在码小课网站中,你可以找到更多关于算法和数据结构的学习内容,包括视频教程、实战练习和面试题解析,帮助你更好地掌握编程技能。