개미 면접 필기시험 문제, 알고리즘 문제 세 문제, 여러분 과 공유, 빠 른 시일 내 에 부의 자유
28491 단어 면접 알고리즘 문제
/**
*
*/
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));
}
}