尋找一個數組中的主元素

主元素就是出現次數大於數組總書目的一半。


時間複雜度要求O(N)


思路是掃描一遍數組,利用主元素出現次數大於一半,即用出現的次數減去未出現的次數,最後還是應該是大於0,一切小於0的都拋棄。最後得到可疑的一個主元素。

再進行一遍遍歷,確定可疑主元素的出現次數,大於一半就是主元素。


public class MainElement
{
	public static void main(String[] args){
		int[] arr1 = new int[]{4,5,4,3,3,4,5,4,6,4,6,4,3,4,4};  //有主元素4
		int[] arr2 = new int[]{4,5,4,3,3,4,5,9,6,4,6,8,3,4,4};	//沒有主元素
		int[] arr3 = new int[]{5,5,4,3,3,4,5,9,6,4,6,8,3,4,4};	//沒有主元素
		int[] arr4 = new int[]{5,4};							//沒有主元素
		int[] arr5 = new int[]{5};								//有主元素5


		search(arr1);
		search(arr2);
		search(arr3);
		search(arr4);
		search(arr5);

	}
	public static void search(int[] arr){
			int times = 0;			//定義出現次數
			int mainEl = 0;			//定義可疑主元素
			for (int i = 0; i < arr.length ; i++ )		//找到可疑主元素
			{
				if (times == 0)
				{
					mainEl = arr[i];
					times = 1;
					continue;
				}
				if (mainEl == arr[i])
				{
					times ++;
				}
				else
				{
					times --;
				}
			}
			
			int num = 0;			//遍歷數組,找可疑主元素的出現次數
			for (int i : arr)
			{
				
				if ( mainEl == i)
				{
					num ++;
				}
			}
			if (num > arr.length / 2)		//大於一半爲主元素
			{
				System.out.println("主元素:" + mainEl);
			}
			else{
				System.out.println("沒有主元素");	
			}
			
		}
}




發佈了36 篇原創文章 · 獲贊 0 · 訪問量 4979
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章