测试:四道算法题

1.二元树的深度。

 

题目:输入一棵二元树的根结点,求该树的深度。

 

从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

 

例如:输入二元树:

                                            10

                                         /     \

                                        6        14

                                      /         /  \

                                    4         12    16

 

输出该树的深度3。

 

二元树的结点定义如下:

 

struct SBinaryTreeNode // a node of the binary tree

{

      int               m_nValue; // value of node

     SBinaryTreeNode  *m_pLeft;  // left child of node

     SBinaryTreeNode  *m_pRight; //right child of node

};

分析:这道题本质上还是考查二元树的遍历。

package com.jiale.test2;

 

public class Test7 {

 

    public static void main(String[] args) {

       // TODO自动生成的方法存根

       BinaryTree bt = new BinaryTree();

       int depth = treeDepth(bt.root);

       System.out.println(depth);

    }

   

    public static int treeDepth(BinaryTreeNode root){

       if (root == null) {

           return -1;

       }else if (root.m_pLeft != null && root.m_pRight == null) {

           return treeDepth(root.m_pLeft)+1;

       }else if (root.m_pLeft == null && root.m_pRight != null) {

           return treeDepth(root.m_pRight)+1;

       }else if (root.m_pLeft == null && root.m_pRight == null) {

           return 1;

       }else {

           return (treeDepth(root.m_pLeft)+1) >= (treeDepth(root.m_pRight)+1) ? (treeDepth(root.m_pLeft)+1) : (treeDepth(root.m_pRight)+1);

       }

    }

}

 

 

class BinaryTree{

    BinaryTreeNode root;

   

    public BinaryTree() {

       root = new BinaryTreeNode(10);

           root.m_pLeft = new BinaryTreeNode(6);

              root.m_pLeft.m_pLeft = new BinaryTreeNode(4);

                  root.m_pLeft.m_pLeft.m_pRight = newBinaryTreeNode(45);

           root.m_pRight = newBinaryTreeNode(14);

              root.m_pRight.m_pLeft = newBinaryTreeNode(12);

              root.m_pRight.m_pRight = newBinaryTreeNode(16);

    }

   

}

 

class BinaryTreeNode{

    int m_nValue;

    BinaryTreeNode m_pLeft;

    BinaryTreeNode m_pRight;

   

    public BinaryTreeNode() {}

   

    public BinaryTreeNode(int m_nValue) {

       this.m_nValue = m_nValue;

    }

   

}

运行结果:

4

 

 

2、n个人(第一个人序号为1,第二个为2…第三个人为n)围成一圈从第一个人开始从1到3一次循环报数,报到3的人出列,下一个人开始从1重新开始报数,求最后留下的人的序号。(20分)

举例:5个人围成一圈,一次编号为一,二,三,四,五。从一号开始报数,一号报1,二号报2,三号报3,三号出列。圈中剩一,二,四,五,四号从1重新开始报数,四号报1,五号报2,一号报3,一号出列,以此类推。

package com.jiale.test2;

 

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.Scanner;

 

public class Test4 {

 

    public static void main(String[] args) {

       System.out.println("请输入n:");

       Scanner s = new Scanner(System.in);

       int n = s.nextInt();

       s.close();

       List<Integer> index = new ArrayList<>();

       for (int i = 1; i <= n; i++) {

           index.add(i);

       }

       int temp = 0;

       while (index.size() >= 3) {

          

           for (int i = 0; i < 3; i++) {

              if (i == 2) {

                  if (temp > index.size()-1) {

                     temp -= index.size();

                  }

                  index.remove(temp--);

              }

              temp++;

           }

       }

       System.out.println("游戏结束:(留下的序列为)");

       Iterator<Integer> iter = index.iterator();

       while (iter.hasNext()) {

           System.out.print((Integer) iter.next()+" ");

       }

    }

 

}

运行结果:

请输入n:

7

游戏结束:(留下的序列为)

1 4

 

请输入n:

5

游戏结束:(留下的序列为)

2 4

 

3.题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。

package com.jiale.test2;

 

import java.util.Scanner;

 

public class Test5 {

 

    public static void main(String[] args) {

       // TODO自动生成的方法存根

       System.out.println("请输入一个字符串:");

       Scanner s = new Scanner(System.in);

       String str = s.next();

       s.close();

       findLoneChar(str);

    }

 

    public static void findLoneChar(String str){

       char[] c = str.toCharArray();

       for (int i = 0; i < c.length; i++) {

           boolean judge = false;

           for (int j = 0; j < c.length; j++) {

              if ((c[i] == c[j]) && (i != j)) {

                  judge = true;

              }

           }

           if (!judge) {

              System.out.print(c[i]+" ");

           }

       }

    }

   

}

运行结果:

请输入一个字符串:

abaccdeff

b d e   

分析:这道题是2006年google的一道笔试题。

 

 

4. 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

package com.jiale.test2;

 

public class Test6 {

 

    public static void main(String[] args) {

       // TODO自动生成的方法存根

       myThread1 t1 = new myThread1();

       myThread1 t2 = new myThread1();

       myThread2 t3 = new myThread2();

       myThread2 t4 = new myThread2();

       t1.start();

       t2.start();

       t3.start();

       t4.start();

    }

   

 

}

 

class myThread1 extends Thread{

   

    int j = 0;

    public void run() {

       for (int i = 0; i < 100; i++) {

           System.out.println(Thread.currentThread().getName()+":i="+(++j));

       }

    }

}

class myThread2 extends Thread{

   

    int j = 100;

    public void run() {

       for (int i = 0; i < 100; i++) {

           System.out.println(Thread.currentThread().getName()+":i="+(--j));

       }

    }

}

运行结果:

Thread-0:i=1

Thread-2:i=99

Thread-3:i=99

Thread-1:i=1

Thread-3:i=98

Thread-2:i=98

Thread-0:i=2

Thread-2:i=97

Thread-2:i=96

Thread-3:i=97

Thread-3:i=96

Thread-3:i=95

Thread-3:i=94

Thread-3:i=93

Thread-3:i=92

Thread-3:i=91

Thread-3:i=90

Thread-3:i=89

Thread-3:i=88

Thread-3:i=87

Thread-3:i=86

Thread-3:i=85

Thread-3:i=84

Thread-3:i=83

Thread-1:i=2

Thread-1:i=3

Thread-1:i=4

Thread-3:i=82

Thread-3:i=81

Thread-3:i=80

Thread-3:i=79

Thread-3:i=78

Thread-3:i=77

Thread-3:i=76

Thread-3:i=75

Thread-3:i=74

Thread-3:i=73

Thread-3:i=72

Thread-3:i=71

Thread-3:i=70

Thread-3:i=69

Thread-3:i=68

Thread-2:i=95

Thread-0:i=3

Thread-2:i=94

Thread-3:i=67

Thread-1:i=5

Thread-3:i=66

Thread-2:i=93

Thread-2:i=92

Thread-0:i=4

Thread-2:i=91

Thread-3:i=65

Thread-1:i=6

Thread-3:i=64

Thread-2:i=90

Thread-0:i=5

Thread-2:i=89

Thread-3:i=63

Thread-1:i=7

Thread-3:i=62

Thread-2:i=88

Thread-0:i=6

Thread-2:i=87

Thread-3:i=61

Thread-1:i=8

Thread-3:i=60

Thread-2:i=86

Thread-0:i=7

Thread-2:i=85

Thread-3:i=59

Thread-1:i=9

Thread-3:i=58

Thread-2:i=84

Thread-0:i=8

Thread-2:i=83

Thread-3:i=57

Thread-1:i=10

Thread-3:i=56

Thread-2:i=82

Thread-0:i=9

Thread-2:i=81

Thread-3:i=55

Thread-1:i=11

Thread-3:i=54

Thread-2:i=80

Thread-0:i=10

Thread-2:i=79

Thread-3:i=53

Thread-1:i=12

Thread-3:i=52

Thread-2:i=78

Thread-0:i=11

Thread-2:i=77

Thread-3:i=51

Thread-1:i=13

Thread-3:i=50

Thread-2:i=76

Thread-2:i=75

Thread-2:i=74

Thread-2:i=73

Thread-2:i=72

Thread-2:i=71

Thread-2:i=70

Thread-2:i=69

Thread-2:i=68

Thread-2:i=67

Thread-2:i=66

Thread-2:i=65

Thread-2:i=64

Thread-2:i=63

Thread-2:i=62

Thread-2:i=61

Thread-2:i=60

Thread-2:i=59

Thread-2:i=58

Thread-2:i=57

Thread-2:i=56

Thread-2:i=55

Thread-2:i=54

Thread-2:i=53

Thread-2:i=52

Thread-2:i=51

Thread-0:i=12

Thread-0:i=13

Thread-0:i=14

Thread-0:i=15

Thread-0:i=16

Thread-0:i=17

Thread-0:i=18

Thread-0:i=19

Thread-0:i=20

Thread-0:i=21

Thread-0:i=22

Thread-0:i=23

Thread-0:i=24

Thread-0:i=25

Thread-0:i=26

Thread-0:i=27

Thread-0:i=28

Thread-0:i=29

Thread-0:i=30

Thread-0:i=31

Thread-0:i=32

Thread-0:i=33

Thread-0:i=34

Thread-0:i=35

Thread-0:i=36

Thread-0:i=37

Thread-2:i=50

Thread-3:i=49

Thread-1:i=14

Thread-3:i=48

Thread-2:i=49

Thread-0:i=38

Thread-2:i=48

Thread-3:i=47

Thread-1:i=15

Thread-3:i=46

Thread-2:i=47

Thread-0:i=39

Thread-2:i=46

Thread-3:i=45

Thread-1:i=16

Thread-3:i=44

Thread-2:i=45

Thread-0:i=40

Thread-2:i=44

Thread-3:i=43

Thread-1:i=17

Thread-3:i=42

Thread-2:i=43

Thread-0:i=41

Thread-2:i=42

Thread-3:i=41

Thread-1:i=18

Thread-3:i=40

Thread-2:i=41

Thread-0:i=42

Thread-2:i=40

Thread-3:i=39

Thread-1:i=19

Thread-3:i=38

Thread-2:i=39

Thread-0:i=43

Thread-2:i=38

Thread-3:i=37

Thread-1:i=20

Thread-3:i=36

Thread-2:i=37

Thread-0:i=44

Thread-2:i=36

Thread-3:i=35

Thread-1:i=21

Thread-3:i=34

Thread-2:i=35

Thread-0:i=45

Thread-2:i=34

Thread-3:i=33

Thread-1:i=22

Thread-3:i=32

Thread-2:i=33

Thread-0:i=46

Thread-2:i=32

Thread-3:i=31

Thread-1:i=23

Thread-3:i=30

Thread-2:i=31

Thread-0:i=47

Thread-2:i=30

Thread-3:i=29

Thread-1:i=24

Thread-3:i=28

Thread-2:i=29

Thread-0:i=48

Thread-2:i=28

Thread-3:i=27

Thread-1:i=25

Thread-3:i=26

Thread-2:i=27

Thread-0:i=49

Thread-2:i=26

Thread-3:i=25

Thread-1:i=26

Thread-3:i=24

Thread-2:i=25

Thread-0:i=50

Thread-2:i=24

Thread-3:i=23

Thread-1:i=27

Thread-3:i=22

Thread-2:i=23

Thread-0:i=51

Thread-2:i=22

Thread-3:i=21

Thread-1:i=28

Thread-3:i=20

Thread-2:i=21

Thread-0:i=52

Thread-2:i=20

Thread-3:i=19

Thread-1:i=29

Thread-3:i=18

Thread-2:i=19

Thread-0:i=53

Thread-2:i=18

Thread-3:i=17

Thread-1:i=30

Thread-3:i=16

Thread-2:i=17

Thread-0:i=54

Thread-2:i=16

Thread-3:i=15

Thread-1:i=31

Thread-3:i=14

Thread-2:i=15

Thread-0:i=55

Thread-2:i=14

Thread-3:i=13

Thread-1:i=32

Thread-3:i=12

Thread-2:i=13

Thread-0:i=56

Thread-2:i=12

Thread-3:i=11

Thread-1:i=33

Thread-3:i=10

Thread-2:i=11

Thread-0:i=57

Thread-2:i=10

Thread-3:i=9

Thread-1:i=34

Thread-3:i=8

Thread-2:i=9

Thread-0:i=58

Thread-2:i=8

Thread-2:i=7

Thread-2:i=6

Thread-2:i=5

Thread-2:i=4

Thread-2:i=3

Thread-3:i=7

Thread-2:i=2

Thread-3:i=6

Thread-3:i=5

Thread-3:i=4

Thread-3:i=3

Thread-3:i=2

Thread-3:i=1

Thread-3:i=0

Thread-1:i=35

Thread-1:i=36

Thread-1:i=37

Thread-2:i=1

Thread-0:i=59

Thread-2:i=0

Thread-1:i=38

Thread-1:i=39

Thread-1:i=40

Thread-0:i=60

Thread-1:i=41

Thread-0:i=61

Thread-1:i=42

Thread-0:i=62

Thread-1:i=43

Thread-0:i=63

Thread-1:i=44

Thread-0:i=64

Thread-1:i=45

Thread-0:i=65

Thread-1:i=46

Thread-0:i=66

Thread-1:i=47

Thread-0:i=67

Thread-1:i=48

Thread-0:i=68

Thread-1:i=49

Thread-0:i=69

Thread-1:i=50

Thread-0:i=70

Thread-1:i=51

Thread-0:i=71

Thread-1:i=52

Thread-0:i=72

Thread-1:i=53

Thread-0:i=73

Thread-1:i=54

Thread-0:i=74

Thread-1:i=55

Thread-0:i=75

Thread-1:i=56

Thread-0:i=76

Thread-1:i=57

Thread-0:i=77

Thread-1:i=58

Thread-0:i=78

Thread-1:i=59

Thread-0:i=79

Thread-1:i=60

Thread-0:i=80

Thread-1:i=61

Thread-0:i=81

Thread-1:i=62

Thread-0:i=82

Thread-1:i=63

Thread-0:i=83

Thread-1:i=64

Thread-0:i=84

Thread-1:i=65

Thread-0:i=85

Thread-1:i=66

Thread-0:i=86

Thread-1:i=67

Thread-0:i=87

Thread-1:i=68

Thread-0:i=88

Thread-1:i=69

Thread-0:i=89

Thread-1:i=70

Thread-0:i=90

Thread-1:i=71

Thread-0:i=91

Thread-1:i=72

Thread-0:i=92

Thread-1:i=73

Thread-0:i=93

Thread-1:i=74

Thread-0:i=94

Thread-1:i=75

Thread-0:i=95

Thread-1:i=76

Thread-0:i=96

Thread-1:i=77

Thread-0:i=97

Thread-1:i=78

Thread-0:i=98

Thread-1:i=79

Thread-0:i=99

Thread-1:i=80

Thread-0:i=100

Thread-1:i=81

Thread-1:i=82

Thread-1:i=83

Thread-1:i=84

Thread-1:i=85

Thread-1:i=86

Thread-1:i=87

Thread-1:i=88

Thread-1:i=89

Thread-1:i=90

Thread-1:i=91

Thread-1:i=92

Thread-1:i=93

Thread-1:i=94

Thread-1:i=95

Thread-1:i=96

Thread-1:i=97

Thread-1:i=98

Thread-1:i=99

Thread-1:i=100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值