面試題:找出無序陣列中出現頻率最高的元素
阿新 • • 發佈:2018-12-12
解決這道題的思路有很多 比如:
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); } }