`
ansjsun
  • 浏览: 199704 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
10000+个数字钟找出top100

import java.util.Arrays;
import java.util.Random;

public class Top100 {
	private static Node head = null;
	private static Node end = null;
	private static Node tempNode = null;
	private static Node node = null;

	public static int[] getTop100(int[] inputArray) {

		int result[] = new int[100];
		int k = 100;
		if (inputArray.length < 100) {
			k = inputArray.length;
		}
		for (int i = 0; i < 100; ++i) {
			result[i] = inputArray[i];
		}

		Arrays.sort(result);

		for (int i = k - 1; i >= 0; i--) {
			node = new Node(result[i], tempNode);
			if (i == k - 1) {
				head = node;
			} else {
				tempNode.right = node;
			}
			if (i == 0) {
				end = node;
			}else{
				tempNode = node;
			}
		}
		tempNode = end ;
		
		
		for (int i = 100; i < inputArray.length; i++) {
			int tempValue = inputArray[i];
			if (tempValue <= end.value) {
				continue;
			}else{
				tempNode = end;
				setValue(inputArray[i]) ;
			}
		}

		for (int i = 0; i < 100; i++) {
			if (i == 0) {
				node = head;
			} else {
				node = node.right;
			}
			result[i] = node.value;
		}

		return result;

	}

	private static void setValue(int tempValue) {
		if (tempNode.value < tempValue) {
			tempNode = tempNode.left;
			//最大的
			if(tempNode==null){
				node = new Node(head,tempValue );
				head.left = node ;
				head = node ;
				removeEnd() ;
			}else{
				setValue(tempValue);
			}
		} else if (tempNode.value != tempValue) {
			node = new Node(tempValue, tempNode);
			//要替代end
			if(tempNode.right==end){
				end.left.right = node ;
				end = node ;
			}else{
				try {
					tempNode.right.left = node;
				} catch (Exception e) {
					// TODO Auto-generated catch block
					System.err.println(tempNode.right) ;
					e.printStackTrace() ;
					System.exit(0) ;
				}
				tempNode.right = node;
				removeEnd() ;
			}
		}
	}
	
	private static void removeEnd(){
		end = end.left ;
		end.right = null ;
	}

	public static void main(String[] args) {

		int numberCount = 1000000;

		int maxNumber = numberCount;

		int inputArray[] = new int[numberCount];

		Random random = new Random();

		for (int i = 0; i < numberCount; ++i) {

			inputArray[i] = Math.abs(random.nextInt(maxNumber));

		}

		System.out.println("Sort begin...");

		long current = System.currentTimeMillis();

		int[] result = Top100.getTop100(inputArray);

		System.out.println(System.currentTimeMillis() - current + "ms");

		for (int i = 0; i < result.length; ++i) {

			System.out.print(i + "." + result[i] + ",");

		}

	}

}

class Node {
	protected int value;
	protected Node left;
	protected Node right;

	public Node(int value) {
		this.value = value;
	}

	public Node(int value, Node left) {
		this.value = value;
		this.left = left;
	}

	public Node(Node right, int value) {
		this.right = right;
		this.value = value;
	}
}

分享到:
评论
4 楼 chujiazhen 2011-09-13  
在ali也被问到了这道题
3 楼 ansjsun 2011-08-19  
bmqnc 写道
哥们,我把你的代码直接copy运行,报了错误啊:
Sort begin...
null
java.lang.NullPointerException
	at Top100.setValue(Top100.java:82)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.getTop100(Top100.java:45)
	at Top100.main(Top100.java:120)


我日我终于看到这个代码了....原来我做过的啊..当初偷懒没有做完..今天有人问我呢..我回答的竟然人家不满意哎...
2 楼 bmqnc 2010-10-13  
另外,弱弱的说一句,我感觉你的代码有点乱,也没讲讲思路 啊。。。。
1 楼 bmqnc 2010-10-13  
哥们,我把你的代码直接copy运行,报了错误啊:
Sort begin...
null
java.lang.NullPointerException
	at Top100.setValue(Top100.java:82)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.setValue(Top100.java:72)
	at Top100.getTop100(Top100.java:45)
	at Top100.main(Top100.java:120)

相关推荐

Global site tag (gtag.js) - Google Analytics