1. 程式人生 > >面試題:找出無序陣列中出現頻率最高的元素

面試題:找出無序陣列中出現頻率最高的元素

解決這道題的思路有很多 比如:

  1.給陣列排序變成有序陣列,然後找到重複次數最多的元素;

  2.用HashMap儲存陣列元素,優先佇列存取陣列元素出現的次數,找出現次數最多的元素輸出;

  3.記錄元素出現的次數及對應的值,迴圈不斷更新最大次數和對應的值,最後儲存的就是最大的元素個值;

第三種思路:

package com.test.bishi;
/**
 * 2018-9-28
 * 找出無序陣列中出現頻率最高的元素
 */

import java.util.LinkedList;
import java.util.Scanner;

public class Test9282{
	
	public static int find(int []a)
	{
		LinkedList<Integer> list=new LinkedList<Integer>();
		for(int i=0;i<a.length;i++)
		{
                        //將陣列元素存入list中
			list.add(a[i]);
		}
		
		int r_value=0;//出現次數最多的元素
		int r_count=0;//出現次數最多的元素出現的次數
		int f_value=0;//第一個元素值
		int f_count=0;//第一個元素出現次數
		
		while(!list.isEmpty())
		{
			f_value=list.getFirst();//得到連結串列的第一個元素
			f_count=1;
			
		    list.removeFirst();//移除陣列第一個值
		    
		    for(int i=0;i<list.size();i++)//迴圈比較
		    {
		    	int t_value=list.get(i);
		    	
		    	if(t_value==f_value)
		    	{
		    		list.remove(i);
		    		f_count++;
		    		i--;
		    		
		    	}
		    }
		    
		    if(f_count >r_count ||(f_count==r_count && f_value>r_value))
		    {
		    	r_value=f_value;
		        r_count=f_count;	
		    
		    }
		}
		System.out.println("出現頻率最高的元素:"+r_value+" 次數:"+r_count);
		
		return r_count;
	}
	public static void main(String[] args) {
		
		Scanner scanner=new Scanner(System.in);
	   
		String string=scanner.nextLine();
		String []ss=string.split(" ");
		
		int []aa=new int[ss.length];
		
		for(int i=0;i<ss.length;i++)
		{
			aa[i]=Integer.valueOf(ss[i]);
		}
		Test9282 test928=new Test9282();
		
		test928.find(aa);
	}
}