简单面试算法题

来源:互联网 发布:无尽的传说2 mac 破解 编辑:程序博客网 时间:2024/06/18 09:16

1.①有未知字符串长度如”AAA&&BB”,以”&&”为分隔符,将字符串分割成字符串数组[“AAA”,”BB”]。(不能用系统分割符)

/* * 这种做法没有判断字符串最前面和最后面是否有"&&" */public static void main(String[] args) {    String strs = "AA&&BB&&CC";    char[] chars = strs.toCharArray();    List<String> strList = new ArrayList<String>();    StringBuilder builder = new StringBuilder();    for (int i = 0; i < chars.length; i++) {        if (chars[i] == '&' && chars[i + 1] == '&') {            i++;            strList.add(builder.toString());            builder = new StringBuilder();            continue;        }        builder.append(chars[i]);    }    strList.add(builder.toString());    int size = strList.size();    String[] strLs = (String[]) strList.toArray(new String[size]);    for (int i = 0; i < strLs.length; i++) {        System.out.println(strLs[i]);    }}

②将数组[“AAA”,”BB”]合并成字符串”AAA&&BB”。

public static void main(String[] args) {    String[] strs = new String[]{"AA","BB","CC"};    StringBuilder builder = new StringBuilder();    for (int i = 0; i < strs.length; i++) {        if (i != 0) {            builder.append("&&");        }        builder.append(strs[i]);    }    System.out.println(builder);}

2.求出不大(小)于N的质数。
3.1000个范围在[0-999]的数,求出两个相同的数。

for (int i = 0; i < 1000; i++) {    for (int j = i + 1; j < 1000; j++) {        if (i != j && b[i] == a[i]) {            System.out.println(b[i]);            return;        }    }}

4.有1.2…N个人围成一个圈报数,当报到M的时候出列。求剩下是哪个人?

public static void main(String[] args) {        List<Integer> persons = new ArrayList<>();        int M = 5; // 报数5出列        for (int i = 0; i < 10; i++) {            persons.add(i);        }        int j = 1; // 报数到N        int i = 0; // 记录移除哪个        boolean isFirst = true;        while (true) {            if (persons.size() == 1) {                System.out.println(persons.get(0));                return;            }            if (!isFirst) {                i++;                j++;            }            isFirst = false; // 第一次赋值不要自加            if (persons.size() >= M) { // List大于M的时候用这里                System.out.println(">M i=" + i + " ,j =" + j);                if (j == M) {                    persons.remove(i);                    if (persons.size() != i) { // 上面移除了一条,所以会出现等于的情况                    /*                     * 只有当不是最后一条的时候才需要减一 因为List删除一条会补回上去的,若是是最后一条的话                    * 需要重置i,而不是减一                     */                    i--;                } else {                    /*                     * 本来重置应该是0的。但是在程序一开始的时候就加了1, 所以是为-1;                 */                    i = -1;                }                j -= M;            }            if (i == persons.size()) {                /*                 * 报到最后一个尾部的时候不够M个,要从头开始数过 当i == persons.size()的时候就是第一个了。             * 所以将i制为1                 */                i = 0;            }        } else { // List小于M的时候用这里            System.out.println("--<M i=" + i + " ,j =" + j);            if (i > persons.size() - 1) {                i = 0;            }            if (j == M) { // j是从0开始数的                persons.remove(i);                j -= M;            }        }    }}

5.计算26个英文字母的组合算法。
6.判断一个数是否是回文数(12321、1245421等)

public static void main(String[] args) {    char[] chars = new char[]{'1','2','3','2','1'};    int size = chars.length;    int tag = 0;    for(int i = 0; i < size / 2; i++) {        if (chars[i] == chars[size - i - 1]) {            tag++;        }    }    if (size % 2 == 0 && tag == size / 2) {        System.out.println("it's true");    } else if (size % 2 != 0 && tag == (size - 1) / 2) {        System.out.println("it's true");    } else {        System.out.println("it's false");    }}

7.求出1000以内的完数。(6=1+2+3)

0 0
原创粉丝点击