개미 면접 필기시험 문제, 알고리즘 문제 세 문제, 여러분 과 공유, 빠 른 시일 내 에 부의 자유

1. 함 수 를 써 서 단 방향 링크 를 역방향 으로 합 니 다.외부 패키지 와 보조 함수 가 처리 되 지 않도록 역방향 프로 세 스 와 데이터 구 조 를 자체 적 으로 작성 해 야 합 니 다.
/**
*                  
*/
public class Node {

	private int data;
	private Node next;
 
	public int getData() {
		return data;
	}
	public void setData(int data) {
		this.data = data;
	}
	public Node getNext() {
		return next;
	}
	public void setNext(Node next) {
		this.next = next;
	}
	public void reverseLinkList_Stack() {  //          
		Stack<Node> stack = new Stack<Node>();
		Node node = head.getNext();
		while (node != null) {
			stack.push(node);
			node = node.getNext();
		}
		while (stack.size() > 0) {
			node = stack.pop();
			System.out.print(node.getData() + "--->");
		}
		System.out.println("null"); //       null      
	}

}



2 세 개의 스 레 드 ID 가 각각 A, B, C 입 니 다. 다 중 프로 그래 밍 으로 이 루어 지 십시오. 화면 에 ABC 를 10 번 반복 해서 인쇄 하 십시오.
/**
*	                  
*	        volatile 
*/
public class TestLock {
	//          
	private Queue<String> threadQueue=new ArrayDeque<>();
	//  volatile                 ,          
	private volatile String turn;
	
	//  
	public void addQueue(Thread thread){
		threadQueue.offer(thread.getName());
	}
	
	//    
	public void lock(){
		Thread currentThread = Thread.currentThread(); //         
		turn=threadQueue.peek();//       
		
		while(!turn.equals(currentThread.getName()));//                      
		
	}
	
	public void unLock(){
		threadQueue.poll(); //     
		turn=threadQueue.peek(); //     
	}
	
	
	public static void main(String[] args) {
		TestLock lock=new TestLock();
		//  10 
		for(int i=0;i<10;i++){
			
			//  ABC    
			Thread A=new Thread(()->{
				lock.lock();
				System.out.print("A");
				lock.unLock();
			});
			Thread B=new Thread(()->{
				lock.lock();
				System.out.print("B");
				lock.unLock();
			});
			Thread C=new Thread(()->{
				lock.lock();
				System.out.println("C");
				lock.unLock();
			});
			//       
			lock.addQueue(A);
			lock.addQueue(B);
			lock.addQueue(C);
			
			A.start();
			B.start();
			C.start();
		
		}
		
	}
	
}

3. 한 고객 이 은행 에서 여러 건의 대출 금 을 빌 렸 는데 시스템 은 매일 시스템 에서 돈 을 공제 하고 공제 가 성공 한 후에 특정한 순서에 따라 각 대출 금 을 청산 해 야 한다.
a) 기한 을 넘 긴 일수 (정수 형) 가 클 수록 우선 처리 합 니 다.b) 사용자 가 기한 을 넘 긴 금 리 (부동 소수점 형) 가 높 을 수록 우선 처리한다.c) 사용 일 (Date 유형) 이 빠 를 수록 우선 처리 합 니 다.d) 모든 조건 이 일치 할 때 기본 값 은 id 로 배열 되 고 id 가 작 을 수록 우선 처리 합 니 다.대출 금 의 데이터 구 조 는 대체로 다음 과 같다.
public class Loan{
 private String id;
 private Integer ovdDays;
 private BigDecimal rate;
 private Date startDate;
 private BigDecimal amount;
 //     …
}

익숙 한 언어 로 함 수 를 써 서 고객 N 건의 대출 (입력 으로) 을 상기 요구 에 따라 정렬 하고 정렬 알고리즘 을 Stable 로 요구 하 십시오.
/**
*                      
*/
public class TestSort {
	
	private int num;
	private double money;
	private Date time;
	//              money       num
	public TestSort(int num, double money, Date time) {
		super();
		this.num = num;
		this.money = money;
		this.time = time;
	}
	@Override
	public String toString() {
		return "[num=" + num + ", money=" + money + ", time=" + time.getTime() + "]";
	}

	public static void main(String[] args) {
		List<TestSort> list=new ArrayList();
		Random r = new Random(1);
		for(int i=0;i<100000;i++){
			list.add(new TestSort(r.nextInt(100), r.nextDouble(), new Date(System.currentTimeMillis())));
			
		}
		long starTime=System.currentTimeMillis();
		//         Timsort(                       )
		//      Comparator    
		Collections.sort(list,new Comparator<TestSort>(){
			@Override
			public int compare(TestSort o1, TestSort o2) {
				// TODO Auto-generated method stub
				if(o1.time.getTime() == o2.time.getTime()){
					if(o1.money == o2.money){
						if(o1.num == o2.num){
							return 0;
						}else{
							return o1.num - o2.num>0?1:-1;
						}
						
					}else{
						return o1.money - o2.money>0?1:-1;
					}
					
				}else{
					return o1.time.getTime()-o2.time.getTime()>0?1:-1;
				}
			}
			});
//		System.out.println(list);
		System.out.println("  :"+(System.currentTimeMillis()-starTime));
	}
	
}

좋은 웹페이지 즐겨찾기