查找數組中重復的唯一元素+時間復雜度O(n)+空間復雜度O(1)


這是我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]);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM