11、汉诺塔问题。
1void tower(n,x,y,z){
2 if(n==1) move(x,z);
3 else {
4 tower(n-1, x,z,y);
5 move(x,z);
6 tower(n-1, y,x,z);
7 }
8}
12、三柱汉诺塔最小步数。
1 int f3(n) {
2 if (f3[n]) return f3[n];
3 else {
4 if (n == 1 ) {
5 f3[n] = 1 ;
6 return 1 ;
7 }
8 f3[n] = 2 * f3(n - 1 ) + 1 ;
9 return f3[n];
10 }
11 }
四柱汉诺塔最小步数。
1int f4(n){
2 if(f4[n]==0){
3 if(n==1) {
4 f4[1]==1;
5 return 1;
6 }
7 min=2*f4(1)+f3(n-1);
8 for(int i=2;i<n;++i){
9 u=2*f4(i)+f3(n-i);
10 if(u<min) min=u;
11 }
12 f4[n]=min;
13 return min;
14 } else return f4[n];
15}
13、在一个链表中删除另一个链表中的元素。
1void delete(List m, List n) {
2 if(!m || !n) return;
3 List pre = new List();
4 pre.next=m;
5 List a=m, b=n,head=pre;
6 while(a && b){
7 if(a.value < b.value) {
8 a=a.next;
9 pre=pre.next;
10 }else if(a.value > b.value){
11 b=b.next;
12 }else{
13 a=a.next;
14 pre.next=a;
15 }
16 }
17 m=head.next;
18}
14、一个数组,下标从0到n,元素为从0到n的整数。判断其中是否有重复元素。
1int hasDuplicate(int[] a, int n){
2 for(int i=0;i<n;++i){
3 while(a[i]!=i && a[i]!=-1){
4 if(a[a[i]]==-1) return 1;
5 a[i]=a[a[i]];
6 a[a[i]]=-1;
7 }
8 if(a[i]==i) {a[i]=-1;}
9 }
10 return 0;
11}
15、判断一颗二叉树是否平衡。
1int isB(Tree t){
2 if(!t) return 0;
3 int left=isB(t.left);
4 int right=isB(t.right);
5 if( left >=0 && right >=0 && left - right <= 1 || left -right >=-1)
6 return (left<right)? (right +1) : (left + 1);
7 else return -1;
8}
9
16、返回一颗二叉树的深度。
1int depth(Tree t){
2 if(!t) return 0;
3 else {
4 int a=depth(t.right);
5 int b=depth(t.left);
6 return (a>b)?(a+1):(b+1);
7 }
8}
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。