极客班

2.面试中的算法模板

2015-08-12  本文已影响331人  偷天神猫

书:cracking the coding interview 豆瓣 亚马逊
网站:careercup

代码风格

代码块可分为三大块:异常处理(空串和边界处理),主体,返回值

代码风格(可参考Google的编程语言规范)

《代码大全》中给出的参考

基本代码素养

实战算法策略

再看一道简单题

Memmove


void *memmove(void *dest, const void *src, size_t n)
{
    // implementation here
}

陷阱

正确写法


void *memmove(void *dest, const void *src, size_t n)
{
    char *p1 = dest;
    const char *p2 = src;

    if (p2 < p1) {
        p2 += n;
        p1 += n;
        while (n-- != 0)
            *--p1 = *--p2;
    } else {
        while (n-- != 0)
            *p1++ = *p2++;
    }

    return p1;
}

排列组合模板

Subsets

{1,2,3}
{{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}}
转化为程序问题

Subsets


void subsets(int[] num) {
    ArrayList<Integer> path = new ArrayList<Integer>();
    Arrays.sort(num);
    subsetsHelper(path, num, 0);    
}

void subsetsHelper(ArrayList<Integer> path, int[] num, int pos) {
    outputToResult(path);

    for (int i = pos; i < num.length; i++) {
        path.add(num[i]);
        subsetsHelper(path, num, i + 1);
        path.remove(path.size() - 1);   
    }
}

Subsets-Sample

对递归图的理解

Unique Subsets

{1,2,2}
{{},{1},{2},{1,2},{2,2},{1,2,2}}

Unique Subsets

Unique Permutations

[1,2,2]
[1,2,2],[2,1,2],[2,2,1]

排列组合模板总结

使用该模板的题目


上一篇下一篇

猜你喜欢

热点阅读