黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

面試題

系統 2205 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條評論