今日头条3月24笔试题java实现

分析:采用BFS

/*操作一:

 *  m = s;
 *  s =  s+s;
 *操作二:
 *s = s + m
 *
 *初始值:s=“a” m = s;
 *
 *现在给定一个正整数n
 *求最少的操作能够使s的长度为n
 * 
 * */
public class Test2 {
static class Node {
int m;
int s;
int count;

public Node(){
this.m=0;
this.s=0;
this.count=0;
}
}

public static int findMin(Node start,int n){

Queue<Node> queue = new LinkedList<Node>();
queue.add(start);
while(!queue.isEmpty()){
Node node = queue.poll();
if(node.s == n){
return node.count;
}else if(node.s<n){
Node node1 = new Node();
Node node2 = new Node();
int count = ++node.count;
node1.m = node.s; node1.s = node.s*2; node1.count=count;
node2.m = node.m; node2.s = node.s+node.m; node2.count=count;
queue.add(node1);
queue.add(node2);
}
}
return -1;

}


public static void main(String[] args){
Node start = new Node();
start.s=1;start.m=1;start.count=0;
long time = System.currentTimeMillis();
int result = findMin(start, 10000);
System.out.println("\r<br>执行耗时 : "+(System.currentTimeMillis()-time)/1000f+" 秒 ");
System.out.println(result);
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值