1. 程式人生 > >求陣列中重複最多的數

求陣列中重複最多的數

如題,給出陣列{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]]++實時增加重複次數。最後找出其中最大值,取索引。若遇到相同最大值,則取較小索引便可。