当前位置: 面试刷题>> 合法数组 (经典算法题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 示例代码

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 示例代码

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 示例代码

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);

码小课提醒: 在码小课网站中,你可以找到更多关于算法和数据结构的学习内容,包括视频教程、实战练习和面试题解析,帮助你更好地掌握编程技能。

推荐面试题