码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-02 17:27:43      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:去掉   span   情况   循环   有一个   空间   空间复杂度   退出   计数   

这是我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(1)

标签:去掉   span   情况   循环   有一个   空间   空间复杂度   退出   计数   

原文地址:https://www.cnblogs.com/ourener/p/9736935.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!