两个简单的面试题

  分享两个简单的面试题,好吧,求质数的那个面试题居然没做出来。。。。要好好打基础

public class Study0812 {

    //获取一个字符串中的重复次数最多的字符
    public static char printMore(String str) {
        //小写字母最多也就是26个
        int[] arr = new int[26];
        char[] chars = str.toCharArray();
        //既然小写字母最多就是26个,那我获取到该字符的ascii码减去97可以直接当作数组的索引,这个索引肯定不会超过26
        for (int i = 0; i < chars.length; i++) {
            arr[chars[i] - 97]++;
        }
        //获取arr数组中最大的数的索引,该索引加97就是字符中重复最多的字符
        int maxIndex = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            if (arr[maxIndex] < arr[i + 1]) {
                maxIndex = i + 1;
            }
        }
        return (char) (maxIndex + 97);
    }

    //输入一个数,获取该数以下的所有质数,例如输入10,输出2,3,5,7
    //什么叫做质数呢,其实就是一个数只能被1和本身整除;
    // 在代码中,假设有一个数是n,我们只需要判断n是否可以整除  2到根号n  之间的所有数,如果都不能整除,该数就是质数
    //这里假设n>3
    public static List<Integer> printPrime(int num){
        List<Integer> result = new ArrayList<>();
        //由于num>3,则肯定有质数2,3,先放进去
        result.add(2);
        result.add(3);
        //找到num以下的所有数,每一个数都去判断是不是质数
        for (int i = 2; i < num; i++) {
            boolean flag = false;
            //判断n是否可以整除  2到根号n  之间的所有数
            //每一整数i只要有一次被其他数整除了,那么就可以断定该数不是质数,直接跳出循环,找下一个i
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if (i%j == 0){
                    flag = false;
                    break;
                }
                flag = true;
            }
            //如果是质数就放到集合中
            if (flag){
                result.add(i);
            }
        }
        return result;

    }

    public static void main(String[] args) {
        //获取重复最多的那个字符
        char ch = printMore("aaabcdexxxxxxfg");
        System.out.println("重复最多的字符是:" + ch);

        //找到一个数以下的所有质数,例如输入10,输出2,3,5,7
        //假设输入的数大于3
        List<Integer> primeList = printPrime(20);
        System.out.println(primeList.toString());
    }
}

 

posted @ 2020-08-12 19:32  java小新人  阅读(319)  评论(0编辑  收藏  举报