查找数组中重复的唯一元素+时间复杂度O(n)+空间复杂度O

Posted ourener

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找数组中重复的唯一元素+时间复杂度O(n)+空间复杂度O相关的知识,希望对你有一定的参考价值。

这是我BIGO前端面试时,面试官给我出的一道题,题目是长度为N的数组,元素大小范围在[1,N-1],只有一个重复的元素,用O(n)的时间复杂度和O(1)的空间复杂度找出来这个重复的元素,

大致思路

  1、因为总共有N个数,每个数的范围是1到N-1,只有一个重复的数,所以这些数肯定是连续的

          2、把对应的数放到与之对应的位置上去

     3、因为这些书不包含0,所以可以一直操作arr[0],把arr[0]上的数字放到对应的位置上去,再把那个位置上的数字放到arr[0]上去

     4、如此循环操作,当arr[0]上的数字与对应位置上的数字相等时,就找到了重复的元素

     5、最坏的情况下循环N次一定能找出来重复的元素

下面是我整理后的javascript代码:

   var arr = [8,1,3,10,11,12,13,14,4,2,6,15,7,16,5,9,17,24,18,19,20,21,22,23,31,25,26,27,28,29,30,5];
    var count=0;//用来统计循环的次数,可以去掉
    while(1)
    {
        if(arr[0]==arr[arr[0]])//判断第0位元素与该元素值指向的元素是否相等,如果相等了,就找到重复的了,退出循环
        {
            alert(arr[0]);
            break;
        }
        
        if(arr[0]!=arr[arr[0]]){ //如果不相等,就交换位置,把第0位置的元素送到与它对应的位置上去   
            var temp = arr[0];
            arr[0]=arr[arr[0]];
            arr[temp]=temp;    
        }
        count++;//循环一次,计数+1
     }console.log(count]);

 

以上是关于查找数组中重复的唯一元素+时间复杂度O(n)+空间复杂度O的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer_查找数组中的任一重复元素

我们如何在 O(n) 时间和 O(1) 空间复杂度内找到数组中的重复数字

hashmap 1.7

关于从数组里面取指定位置的元素的时间复杂度的问题

Leetcode题解——数据结构之哈希表

用最小的空间复杂度找出一个长度为n的数组且数据中的元素是[0,n-1]中任一个重复的数据。