日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

面試題

系統 2073 0

一道阿里電話面試中的算法題

文章分類: Java編程

電話面試算法題一道:找出數組中重復次數最多的元素并打印

問題不難,看你能給出更優的方案

Java代碼
  1. import java.util.HashMap;
  2. import java.util.Iterator;
  3. import java.util.Map.Entry;
  4. import commons.algorithm.sort.QuickSort;
  5. /**
  6. *找出數組中重復次數最多的元素并打印
  7. *
  8. */
  9. public class Problem_3{
  10. //先快速排序后循環查找O(n*log2(n)+n)
  11. public static void find1( int []arr){
  12. QuickSort.sort(arr);
  13. int max=arr[ 0 ];
  14. int pre= 1 ;
  15. int now= 1 ;
  16. for ( int i= 0 ;i<(arr.length- 1 );i++){
  17. if (arr[i]==arr[i+ 1 ])
  18. now++;
  19. else {
  20. if (now>=pre){
  21. pre=now;
  22. now= 1 ;
  23. max=arr[i];
  24. }
  25. }
  26. }
  27. }
  28. //嵌套循環查找O(n*n)
  29. public static void find2( int []arr){
  30. int pre= 0 ;
  31. int max=arr[ 0 ];
  32. for ( int i= 0 ;i<arr.length;i++){
  33. int now= 0 ;
  34. for ( int j= 0 ;j<arr.length;j++){
  35. if (arr[i]==arr[j]){
  36. now++;
  37. }
  38. }
  39. if (now>=pre){
  40. max=arr[i];
  41. pre=now;
  42. }
  43. }
  44. }
  45. //通過Hash方式
  46. public static void find3( int []arr){
  47. HashMap<Integer,Integer>hm= new HashMap<Integer,Integer>();
  48. for ( int i= 0 ;i<arr.length;i++){
  49. if (hm.containsKey(arr[i])){
  50. int count=hm.get(arr[i]);
  51. hm.put(arr[i],++count);
  52. } else {
  53. hm.put(arr[i], 1 );
  54. }
  55. }
  56. Iterator<Entry<Integer,Integer>>it=hm.entrySet().iterator();
  57. int pre= 0 ;
  58. int max=arr[ 0 ];
  59. while (it.hasNext()){
  60. Entry<Integer,Integer>en=it.next();
  61. int key=en.getKey();
  62. int val=en.getValue();
  63. if (val>pre){
  64. pre=val;
  65. max=key;
  66. }
  67. }
  68. }
  69. public static void main(Stringargs[]){
  70. //數據量800重復元素多,查找時候分別是:463680195
  71. int arr2[]={ 0 , 1 , 2 ,.....
  72. , 0 , 1 , 2 , 3 , 6 , 7 , 8 , 9 };
  73. //數據量800重復元素少,查找時間分別是823727360
  74. int arr[]={ 0 , 0 , 0 , 11 , 12 , 13 , 14 , 5 , 6 ......
  75. , 51 , 52 , 53 ,, 728 , 29 , 730 , 731 , 3 , 794 , 95 , 796 , 797 , 798 , 799 };
  76. long start,end;
  77. start=System.currentTimeMillis();
  78. for ( int i= 0 ;i< 1000 ;i++)find1(arr);
  79. end=System.currentTimeMillis();
  80. System.out.println(end-start);
  81. start=System.currentTimeMillis();
  82. for ( int i= 0 ;i< 1000 ;i++)find2(arr);
  83. end=System.currentTimeMillis();
  84. System.out.println(end-start);
  85. start=System.currentTimeMillis();
  86. for ( int i= 0 ;i< 1000 ;i++)find3(arr);
  87. end=System.currentTimeMillis();
  88. System.out.println(end-start);
  89. }
  90. }

面試題


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 太白县| 兴海县| 沾化县| 平塘县| 新化县| 新和县| 西吉县| 凤山县| 德昌县| 海口市| 田阳县| 盖州市| 衢州市| 扎赉特旗| 安岳县| 孝昌县| 长宁区| 安吉县| 赫章县| 泽普县| 株洲县| 攀枝花市| 弋阳县| 淮滨县| 民丰县| 海南省| 宽城| 卢龙县| 无棣县| 东城区| 同仁县| 南安市| 江安县| 千阳县| 阿尔山市| 德庆县| 江山市| 张家川| 宁城县| 肥乡县| 崇左市|