看网友的一道腾讯面试题有感

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 01:34   11   0
10000+个数字钟找出top100
Java代码 复制代码 收藏代码
  1. import java.util.Arrays;
  2. import java.util.Random;
  3. public class Top100 {
  4. private static Node head = null;
  5. private static Node end = null;
  6. private static Node tempNode = null;
  7. private static Node node = null;
  8. public static int[] getTop100(int[] inputArray) {
  9. int result[] = new int[100];
  10. int k = 100;
  11. if (inputArray.length < 100) {
  12. k = inputArray.length;
  13. }
  14. for (int i = 0; i < 100; ++i) {
  15. result[i] = inputArray[i];
  16. }
  17. Arrays.sort(result);
  18. for (int i = k - 1; i >= 0; i--) {
  19. node = new Node(result[i], tempNode);
  20. if (i == k - 1) {
  21. head = node;
  22. } else {
  23. tempNode.right = node;
  24. }
  25. if (i == 0) {
  26. end = node;
  27. }else{
  28. tempNode = node;
  29. }
  30. }
  31. tempNode = end ;
  32. for (int i = 100; i < inputArray.length; i++) {
  33. int tempValue = inputArray[i];
  34. if (tempValue <= end.value) {
  35. continue;
  36. }else{
  37. tempNode = end;
  38. setValue(inputArray[i]) ;
  39. }
  40. }
  41. for (int i = 0; i < 100; i++) {
  42. if (i == 0) {
  43. node = head;
  44. } else {
  45. node = node.right;
  46. }
  47. result[i] = node.value;
  48. }
  49. return result;
  50. }
  51. private static void setValue(int tempValue) {
  52. if (tempNode.value < tempValue) {
  53. tempNode = tempNode.left;
  54. //最大的
  55. if(tempNode==null){
  56. node = new Node(head,tempValue );
  57. head.left = node ;
  58. head = node ;
  59. removeEnd() ;
  60. }else{
  61. setValue(tempValue);
  62. }
  63. } else if (tempNode.value != tempValue) {
  64. node = new Node(tempValue, tempNode);
  65. //要替代end
  66. if(tempNode.right==end){
  67. end.left.right = node ;
  68. end = node ;
  69. }else{
  70. try {
  71. tempNode.right.left = node;
  72. } catch (Exception e) {
  73. // TODO Auto-generated catch block
  74. System.err.println(tempNode.right) ;
  75. e.printStackTrace() ;
  76. System.exit(0) ;
  77. }
  78. tempNode.right = node;
  79. removeEnd() ;
  80. }
  81. }
  82. }
  83. private static void removeEnd(){
  84. end = end.left ;
  85. end.right = null ;
  86. }
  87. public static void main(String[] args) {
  88. int numberCount = 1000000;
  89. int maxNumber = numberCount;
  90. int inputArray[] = new int[numberCount];
  91. Random random = new Random();
  92. for (int i = 0; i < numberCount; ++i) {
  93. inputArray[i] = Math.abs(random.nextInt(maxNumber));
  94. }
  95. System.out.println("Sort begin...");
  96. long current = System.currentTimeMillis();
  97. int[] result = Top100.getTop100(inputArray);
  98. System.out.println(System.currentTimeMillis() - current + "ms");
  99. for (int i = 0; i < result.length; ++i) {
  100. System.out.print(i + "." + result[i] + ",");
  101. }
  102. }
  103. }
  104. class Node {
  105. protected int value;
  106. protected Node left;
  107. protected Node right;
  108. public Node(int value) {
  109. this.value = value;
  110. }
  111. public Node(int value, Node left) {
  112. this.value = value;
  113. this.left = left;
  114. }
  115. public Node(Node right, int value) {
  116. this.right = right;
  117. this.value = value;
  118. }
  119. }
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP