Skip to content

数组中出现两次的数字 空间 O(1),时间 O(n)

  1. LeetCode 442. 数组中重复的数据 (Find All Duplicates in an Array) https://leetcode.cn/problems/find-all-duplicates-in-an-array/description/

就是记一下出现的数的索引,然后把这个索引对应的数变成负数。如果是负数,那么代表nums[index]出现过。

说白了就是通过负数来存。

js
const findDuplicates = (nums) => {
    const result = [];

    for(let i=0;i<nums.length;i++){
        const num = Math.abs(nums[i])
        const index = num - 1;

        if(nums[index] < 0){
            result.push(num);
        }else{
            nums[index] = -nums[index];
        }
    }
    return result;
}
  1. LeetCode 448. 找到所有数组中消失的数字 (Find All Numbers Disappeared in an Array) https://leetcode.cn/problems/find-all-numbers-disappeared-in-an-array/
js
var findDisappearedNumbers = function(nums) {
    
    let result = [];

    for(let i=0;i<nums.length;i++){
        const num = Math.abs(nums[i]);
        const index = num-1;
        if(nums[index]>0) nums[index] = -nums[index];
    }

    for(let i=0;i<nums.length;i++){
        if(nums[i]>0) result.push(i+1);
    }
    return result;
};
  1. LeetCode 287. 寻找重复数 (Find the Duplicate Number) https://leetcode.cn/problems/find-the-duplicate-number/
本站访客数 人次 本站总访问量