判斷數組中是否有存在重複值

來源:互聯網
上載者:User

面試題:
      已知有一長度為100的無序隨機整型數組,且數值範圍是[1,100],寫一演算法,判斷數組中是否有存在重複值,要求,不得嵌套迴圈,不得使用遞迴。

方法一: 

 1public bool CheckRepeat(int [] a)
 2{
 3        //定義一個數組測試用,思想:數組的下標和值都是上一個數組元素中的值
 4         int [] array = new int [101] ;
 5          //將數組的值都複製到測試數組中 
 6          for (int i = 0;i < 100;i ++)
 7          {
 8                      int a = a [i];
 9                      array [a] = a;    //或者 Array[a]=任何非零的數字,做標誌用。
10           }
11 
12         //如果數組沒有重複,則會填滿測試數組,否則數組中將出現自動初始化的值
13         for (int i = 1; i <101 ;i ++)
14         {
15                      //判斷如果數組中有自動初始的值,則數組沒有被填滿
16                      if (array [i] == 0 )
17                      {
18                               return false;
19                       }
20         }
21           return true;
22}

上述方法收集自網路,這個方法寫的很巧妙,思路也很清晰,但看起來還是有些多餘代碼,儘管滿足了題目要求,只使用了一重迴圈,但演算法中使用了兩個迴圈進行判斷,感覺還不夠簡潔,下面改造演算法為一個單迴圈:

方法二: 

 1public bool CheckRepeat(int [] a)
 2{
 3    int [] array = new int [101] ;//數組元素值初始化預設為0
 4    for (int i = 0;i < 100;i ++)
 5    {
 6        int a = a [i];
 7        if(array[a]!=0) //說明此元素已經賦過值了,即發生了重複
 8           return true;
 9        else
10           array [a] = 1;    //做標誌用,也可賦任何不為0的數
11    } 
12    return false;
13}

轉自:http://www.cnblogs.com/SuperSun/archive/2009/03/06/1404513.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.