求陣列中重複最多的數
阿新 • • 發佈:2019-01-28
如題,給出陣列{2,5,2,4,3,3,9,6},求其中重複最多的數。若有幾個數重複次數相同,則取數值最小的。
先給出程式碼,再說思路。
public static void main(String[] args) { // TODO Auto-generated method stub int a[]=new int[]{2,5,2,4,3,3,9,6}; int b[]=new int[10];//其中所有元素初始為0 int max=0;//儲存最大重複次數 int maxN=0;//儲存最大重複次數對應索引 for(int i=0;i<a.length;i++) { b[a[i]]++; } max=b[0]; for(int i=0;i<10;i++) { if(max<b[i]) { max=b[i]; maxN=i; }else if(max==b[i]) { if(maxN>i) { maxN=i; } } } System.out.println(maxN); }
其實最開始我想的時候,想要掃描N次,每次掃描都得到其中一個數值的重複次數,並將其放入一個容器,再將該數的數值放入一個容器。每次掃描結束根據情況更新便可。
但是這樣做的結果是時間複雜度大,而且麻煩。並且陣列其實提供給我們兩個資訊可以使用,一個是內容,一個是對應索引,如果我們這樣做,只使用了陣列的內容。
因此我們可以建立一個數組長度為10的陣列,索引0對應的空間存放0出現的次數,其他也是如此。這樣下來我們便只需要掃描整個陣列一遍,使用b[a[i]]++實時增加重複次數。最後找出其中最大值,取索引。若遇到相同最大值,則取較小索引便可。