看網友的一道騰訊面試題有感

來源:互聯網
上載者:User

10000+個數字鐘找出top100 Java代碼
 

  1. import java.util.Arrays;   
  2. import java.util.Random;   
  3.   
  4. public class Top100 {   
  5.     private static Node head = null;   
  6.     private static Node end = null;   
  7.     private static Node tempNode = null;   
  8.     private static Node node = null;   
  9.   
  10.     public static int[] getTop100(int[] inputArray) {   
  11.   
  12.         int result[] = new int[100];   
  13.         int k = 100;   
  14.         if (inputArray.length < 100) {   
  15.             k = inputArray.length;   
  16.         }   
  17.         for (int i = 0; i < 100; ++i) {
      
  18.             result[i] = inputArray[i];   
  19.         }   
  20.   
  21.         Arrays.sort(result);   
  22.   
  23.         for (int i = k - 1; i >= 0; i--) {
      
  24.             node = new Node(result[i], tempNode);   
  25.             if (i == k - 1) {   
  26.                 head = node;   
  27.             } else {   
  28.                 tempNode.right = node;   
  29.             }   
  30.             if (i == 0) {   
  31.                 end = node;   
  32.             }else{   
  33.                 tempNode = node;   
  34.             }   
  35.         }   
  36.         tempNode = end ;   
  37.            
  38.            
  39.         for (int i = 100; i < inputArray.length; i++) {   
  40.             int tempValue = inputArray[i];   
  41.             if (tempValue <= end.value) {   
  42.                 continue;   
  43.             }else{   
  44.                 tempNode = end;   
  45.                 setValue(inputArray[i]) ;   
  46.             }   
  47.         }   
  48.   
  49.         for (int i = 0; i < 100; i++) {
      
  50.             if (i == 0) {   
  51.                 node = head;   
  52.             } else {   
  53.                 node = node.right;   
  54.             }   
  55.             result[i] = node.value;   
  56.         }   
  57.   
  58.         return result;   
  59.   
  60.     }   
  61.   
  62.     private static void setValue(int tempValue) {   
  63.         if (tempNode.value < tempValue) {   
  64.             tempNode = tempNode.left;   
  65.             //最大的   
  66.             if(tempNode==null){   
  67.                 node = new Node(head,tempValue );   
  68.                 head.left = node ;   
  69.                 head = node ;   
  70.                 removeEnd() ;   
  71.             }else{   
  72.                 setValue(tempValue);   
  73.             }   
  74.         } else if (tempNode.value != tempValue) {   
  75.             node = new Node(tempValue, tempNode);   
  76.             //要替代end   
  77.             if(tempNode.right==end){   
  78.                 end.left.right = node ;   
  79.                 end = node ;   
  80.             }else{   
  81.                 try {   
  82.                     tempNode.right.left = node;   
  83.                 } catch (Exception e) {   
  84.                     // TODO Auto-generated catch block
      
  85.                     System.err.println(tempNode.right) ;   
  86.                     e.printStackTrace() ;   
  87.                     System.exit(0) ;   
  88.                 }   
  89.                 tempNode.right = node;   
  90.                 removeEnd() ;   
  91.             }   
  92.         }   
  93.     }   
  94.        
  95.     private static void removeEnd(){   
  96.         end = end.left ;   
  97.         end.right = null ;   
  98.     }   
  99.   
  100.     public static void main(String[] args) {   
  101.   
  102.         int numberCount = 1000000;   
  103.   
  104.         int maxNumber = numberCount;   
  105.   
  106.         int inputArray[] = new int[numberCount];   
  107.   
  108.         Random random = new Random();   
  109.   
  110.         for (int i = 0; i < numberCount; ++i) {   
  111.   
  112.             inputArray[i] = Math.abs(random.nextInt(maxNumber));   
  113.   
  114.         }   
  115.   
  116.         System.out.println("Sort begin...");   
  117.   
  118.         long current = System.currentTimeMillis();   
  119.   
  120.         int[] result = Top100.getTop100(inputArray);   
  121.   
  122.         System.out.println(System.currentTimeMillis() - current + "ms");   
  123.   
  124.         for (int i = 0; i < result.length; ++i) {   
  125.   
  126.             System.out.print(i + "." + result[i] + ",");   
  127.   
  128.         }   
  129.   
  130.     }   
  131.   
  132. }   
  133.   
  134. class Node {   
  135.     protected int value;   
  136.     protected Node left;   
  137.     protected Node right;   
  138.   
  139.     public Node(int value) {   
  140.         this.value = value;   
  141.     }   
  142.   
  143.     public Node(int value, Node left) {   
  144.         this.value = value;   
  145.         this.left = left;   
  146.     }   
  147.   
  148.     public Node(Node right, int value) {   
  149.         this.right = right;   
  150.         this.value = value;   
  151.     }   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.