算法汇总

2017-09-01  本文已影响0人  DevWang
1、字符串反转
小结:

2、求两个字符串的交集
版本1:查找下面两个字符串中的相同元素并输出
String stra = "庄周,甄姬,刘禅,姜子牙,孙膑,鲁班七号,廉颇";
String strb = "庄周,刘禅,廉颇,程咬金,芈月,钟无艳";
版本2:从两个字符串中找出最长的相同字符串序列
String stra = "abchelHelouyouarmabc";
String strb = "You are my Hello abcd, hello";
3、手动实现String的index方法
public int index(String src, String des) { // 源字符串,目标字符串
    int index = -1;
    int lenS = src.length();
    int lenD = des.length();
    for (int i = 0; i < lenD; i++) {
        if (des.charAt(i) == src.charAt(0)) { // 找到第一个符合的字符
            if (lenD - i < lenS) { // 目标字符串从i位置开始剩下的字符数 < 源字符串数
                break;
            }
            index = i;
            for (int n = i + 1, j = 1; j < lenS && n < lenD; j++, n++) {
                if (des.charAt(n) != src.charAt(j)) { // 出现差异,break,重新查找
                    index = -1;
                    break;
                }
            }
        }
        if (index > -1) {
            break;
        }
    }
    return index;
}
4、用两个栈实现一个队列

假设这两个栈分别为s1,s2

小结:

优先选择思路3:只会在s2为空时将s1中的元素倒入s2,避免了反复“倒”栈,仅在需要时才“倒”一次。

5、用两个队列实现一个栈

假设这两个队列分别为q1,q2

小结:
6、用两个线程交替打印数字1~100

假设这两个线程分别为:
thread1 打印 1 3 5 7 9...
thread2打印 2 4 6 8 10...
最终打印结果为1 2 3 4 5 6 7 8 9 10...

100、经典案例
问题描述
分析思路
实现方案
public void findValidNum() {
    int N = 100; // 100个数字
    for (int i = 1; i <= N; i++) { // 遍历这些数字
        int num = 1; // 至少有一个约数:它本身
        for (int j = 1; j <= i >> 1; j++) { // 除了本身之外最大约数不应该超过 这个数字的一半
            if (i >= j && i % j == 0) { // 如果i对j取余等于0说明j是i的约数
                num++;
            }
        }
        if (num % 2 != 0) { // 余数个数为基数则输出
            System.out.print(i + ",");
        }
    }
}

未完待续...

上一篇下一篇

猜你喜欢

热点阅读