2019年快手笔试编程题:

题目一:判断输入的一组数据,构建二叉树,能否满足是满二叉搜索树

package writtenExam;

import java.util.Scanner;

/**
 * @author hadoop
 *输入一组数,形式大概为:12,10,15,12,13,15,11
 *判断其能否满足一颗二叉搜素数:man二叉树,假如中序遍历的话会是输出有序数组
 */
public class KuaiShouSolution1 {
    public static void main(String[] args) {
        Scanner  scanner = new Scanner(System.in);
        String s1 =scanner.next();
        if (s1.equals("None")) {
            System.out.println("True");
        }
        String string[] = s1.split(",");
        //先判断树的节点满不满足构成一颗满二叉树
        if (!checkMan(string.length+1)) {
            System.out.println("False");
        }else {
            int arr[]=new int [string.length];
            for (int i=0; i<arr.length;i++) {
                arr[i]=Integer.parseInt(string[i]);
            }
            if (checkShu(arr)) {
                System.out.println("True");
            }else {
                System.out.println("False");
            }
        }
        scanner.close();
    }
    //检查满二叉树的所有父节点满不满足大于左子树。小于右子树
    public static boolean checkShu(int arr[]) {
        boolean res=true;
        for(int i=0;i<=arr.length/2-1 && res; i++) {
            res=( (arr[i] >= arr[i*2+1]) && (arr[i] <= arr[i*2+2]))?true:false;
        }
        return res;
    }
    //檢查树的节点数是否满足满二叉树
    public static boolean checkMan(int k) {
        if (k<1) return false;
        int i=1;
        while(i <= k) {
            if (i == k) return true;
            i=i<<1; //左移一位,低位补0
        }
        return false;//K不是2的n次方
    }
}

题目三:判断一个数的二进制中包含多少个1(分别采用递归和位运算实现) 

package writtenExam;

import java.util.Scanner;

/**
 * @author hadoop
 *输出一个数的二进制数中,有多少个1
 */
public class KuaiShouSloution3 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int x =scanner.nextInt();
       System.out.println("递归方法的结果:"+countNumof_1(Integer.toBinaryString(x), 0, Integer.toBinaryString(x).length()-1, 0));
       System.out.println("位运算的结果:"+countNumof_1(x));
       scanner.close();
    }
    
    
    //使用递归的方法统计二进制字符串中有多少个1
    public static int countNumof_1(String s, int left,int right,int a) {
        int res =a;
        if (left >right) {
            return res;
        }else {
            if (s.charAt(left) == '1') {
                res++;
            }
            return countNumof_1(s, left+1, right,res);
        }
    }
    
    //使用位运算来统计一个数的二进制中有多少个1
    public static int countNumof_1(int k) {
        int res=0;
        if(k==0) {
            return 0;
        }
        while(k!=0) {
            res++;
            k= k & (k-1);
        }
        return res;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_28619473/article/details/88930657
今日推荐