当前位置: 面试刷题>> 合法数组 (经典算法题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);
```
**码小课提醒**:
在码小课网站中,你可以找到更多关于算法和数据结构的学习内容,包括视频教程、实战练习和面试题解析,帮助你更好地掌握编程技能。