问题描述
创新工厂的笔试题目,大家一起来讨论一下。1、把输入的字符串转置。比如输入“IloveYOUtoo”,则输出“tooYOUloveI”。2,输入一个整数,计算出比该整数大的最小的质数。3,输入一个数组,生成一个二叉排序树。
解决方案
解决方案二:
1.把字符串按照空格断开,然后倒序输出split()for(intindex=split().size-1;index>=0;index--){^^}
解决方案三:
引用1楼hardycheng的回复:
1.把字符串按照空格断开,然后倒序输出split() for(intindex=split().size-1;index>=0;index--){^^}
不要忘了、有空格的需要补回去。。。
解决方案四:
2.判断实数的方法,无法整除任何大于1小于平方根的整数
解决方案五:
啊,不是实数,是质数……
解决方案六:
mark!
解决方案七:
主要是对质数这个概念不清楚,不敢轻易给代码现在哥德巴赫猜想还是没有完全被证明
解决方案八:
我也分享一些Java面试题吧变态海量+专业分类特别全
解决方案九:
学习一下
解决方案十:
MK
解决方案十一:
引用6楼hardycheng的回复:
主要是对质数这个概念不清楚,不敢轻易给代码现在哥德巴赫猜想还是没有完全被证明
这个不需要哥德巴赫猜想吧,质数的概念只是除了1和本身外没有其他因数,所以其实只要判断到平方根就可以了,因为如果有大于平方根的因数,那么必然存在小于平方根的因数
解决方案十二:
1用空格分隔成数组,然后将数组倒序,最后再将数组组成字符串2booleanissu(intindex){for(inti=2;i<index;i++){if(index%i==0){returntrue;}}returnfalse;}main(){inti=10;intj=i+1;while(!issu(j)){j++;}System.out.println(j);}
解决方案十三:
第一题直接用栈做
解决方案十四:
我只做第三个/***二叉排序树**@authorJuly**/publicclassT{publicstaticvoidmain(String[]args){int[]data={8,1,7,8,5,6,4,8,9,3,0,2};Treet=newTree(null,null,data[0]);for(inti=1;i<data.length;i++){t.insert(data[i]);}t.print();}}classTree{Treeleft,right;intvalue;publicTree(Treeleft,Treeright,intitem){this.left=left;this.right=right;this.value=item;}publicvoidinsert(intvalue){Treeroot=this;Treenode=newTree(null,null,value);while(true){if(root.value>value){if(root.left==null){root.left=node;return;}root=root.left;}else{if(root.right==null){root.right=node;return;}root=root.right;}}}publicvoidprint(){if(left!=null){left.print();}System.out.println(value+"");if(right!=null){right.print();}}}
解决方案十五:
1、把输入的字符串转置。比如输入“IloveYOUtoo”,则输出“tooYOUloveI”。:把这个字符串压入栈,然后打出来就可以了(先进后出的原理)
解决方案:
我想了想应该把我写的类Tree的名字改成TreeNode
解决方案:
第二题:intm输入的那个整数intn;比m大的最小质数publicvoidprintMinNumber(){for(inti=m+1;;m++){if(check(m)){n=m;System.out.print("比M大的最小质数n为:"+n);}}}publicbooleancheck(intnumber){for(inti=2;i<=number/2;i++){if(number%i==0){returntrue;}}returnfalse;}
解决方案:
上面的printMinNumber()方法中在打出n之后要return不然是个死循环了
解决方案:
郁闷我,我数据结构学的不是很好,就在这乱写啦!
解决方案:
publicbooleanisPrime(intn){if(n<0)returnisPrime(-n);if(n<=1)returnfalse;if(n==2)returntrue;intsqrt=(int)Math.sqrt(n);for(inti=2;i<=sqrt;i++)if(n%i==0)returnfalse;returntrue;}publicintgetMinPrime(intn){while(!isPrime(++n));returnn;}
这个是我的第二题
解决方案:
感觉不是特别特别难!
解决方案:
第二题需要数学算法,如果没有的话还有一种极端做法,将已知质数列一个数组。然后在数组里面快速比较就可以了。但缺点是如果输入数字过大,没在已知质数数组里就没用了。只能自己弹一个错误对话框
解决方案:
第二题:publicclassMinPrime{publicstaticvoidmain(String[]args){System.out.println(getMinPrime(13));}publicstaticintgetMinPrime(intdigit){digit++;inthalf=(int)Math.sqrt(digit);inti=2;for(;i<=half;i++){if(digit%i==0)returngetMinPrime(digit++);}returndigit;}}
解决方案:
呵呵呵,这个应该和哥德巴赫猜想没有联系吧
解决方案:
重新发过publicclassT{publicstaticvoidmain(String[]args){int[]data={8,1,7,8,5,6,4,8,9,3,0,2};TreeNodet=newTreeNode(data[0]);for(inti=1;i<data.length;i++){t.insert(data[i]);}t.print();}}classTreeNode{TreeNodeleft,right;intvalue;publicTreeNode(intvalue){this.value=value;}publicvoidinsert(intvalue){TreeNoderoot=this;TreeNodenode=newTreeNode(value);while(true){if(root.value>value){if(root.left==null){root.left=node;return;}root=root.left;}else{if(root.right==null){root.right=node;return;}root=root.right;}}}publicvoidprint(){if(left!=null){left.print();}System.out.println(value+"");if(right!=null){right.print();}}}
解决方案:
引用24楼haojia0716的回复:
重新发过JavacodepublicclassT{publicstaticvoidmain(String[]args){int[]data={8,1,7,8,5,6,4,8,9,3,0,2};TreeNodet=newTreeNode(data[0]);for(inti=1;i<data.length;i++){t.insert(data[i]);}t.print();}}classTreeNode{TreeNodeleft,right;intvalue;publicTreeNode(intvalue){this.value=value;}publicvoidinsert(intvalue){TreeNoderoot=this;TreeNodenode=newTreeNode(value);while(true){if(root.value>value){if(root.left==null){root.left=node;return;}root=root.left;}else{if(root.right==null){root.right=node;return;}root=root.right;}}}publicvoidprint(){if(left!=null){left.print();}System.out.println(value+"");if(right!=null){right.print();}}}
学习了!
解决方案:
之前李开复来我们学校做宣讲时说过创新工场面试不强调算法,google则强调算法,看来果真如此,题目蛮简单的
解决方案:
这个题其实就是对数组元素的排序呢,比起诸如冒泡、选择、插入等排序方法效率怎么样呢?还有return能否改成break,循环里用return不太好吧,效果应该是一样的,跳出循环后,这个方法就结束,自然也就return了;
解决方案:
回楼上这里break和return其实一样的因为只有一层循环而且while后面没有语句了循环里用return从语法上来说是没完全没有问题的有很多递归算法都有这种写法啊如果说排序效率的话我想平均说来还是快速排序最好如果数据量很小可以选择插入排序
解决方案:
晚了先mark一下明天再想想
解决方案:
顶一下、、、
解决方案:
rookie001的图像>.<
解决方案:
这次我参加的百度商务搜索部面试第一题和这个第一题一样
解决方案:
学习了
解决方案:
第一题如何处理空格?用比较简单的方式
解决方案:
第一题publicstaticvoidfunction(Strings){String[]s1=s.split("\s");Strings2="";for(inti=s1.length-1;i>=0;i--){s2+=s1[i]+"";}s2=s2.substring(0,s2.length()-1);System.out.println(s2);}publicstaticvoidmain(String[]args){Strings="IloveYOUtoo";function(s);}
解决方案:
感觉第二题还是打表比较快privatestaticintbiggerPrime(intnum){intcount=0;int[]tag=newint[2*num];int[]p=newint[num];for(inti=0;i<tag.length;i++){tag[i]=0;}for(inti=2;i<2*num;i++){if(tag[i]==0){if(i>num)returni;p[count++]=i;}for(intj=0;(j<count&&i*p[j]<2*num&&(p[j]<=tag[i]||tag[i]==0));j++)tag[i*p[j]]=p[j];}return-1;}
解决方案:
学习了
解决方案:
学习下了