美文网首页
面试算法题归总

面试算法题归总

作者: Mrfang1 | 来源:发表于2022-01-01 17:10 被阅读0次

    1.将数组中的0移到最前面

    提供一个数组 s[10] = {4,0,0,1,2,0,5,0,3,0}, 将其中的0移到最前面且不改变非0值的顺序,
    上面例子的结果是: res[10] = {0,0,0,0,0,4,1,2,5,3};

    冒泡排序

    void swap0_bubbleSort(int a[], int len) {
        for(int i = 0; i < len; i++) {
            for(int j = 0; j < len - i - 1; j++) {
                if(a[j+1] == 0) {
                    int tmp = a[j+1];
                    a[j+1] = a[j];
                    a[j] = tmp;
                }
            }
        }
    }
    

    时间复杂度: O(n2)

    插入排序

    void swap0_insertSort(int a[], int len) {
        for(int i = 1; i < len; i++) {
            int tmp = a[i];
            int j = i;
            
            for(;j > 0 && tmp == 0;j--) {
                a[j] = a[j-1];
            }
            a[j] = tmp;
        }
    }
    

    时间复杂度:O(n2)

    遍历交换

    void swap0_exchange(int a[], int len) {
        for(int i = len - 1,k = len - 1; i >= 0; i--) {
            //k指向0的元素位置,i指向非0的元素位置
            if(a[i] != 0) {
                int tmp = a[k];
                a[k] = a[i];
                a[i] = tmp;
                
                k--;
            }
        }
    }
    

    时间复杂度:O(n)

    2.斐波那契数列

    青蛙跳一次可以跳1阶,可以跳2阶,问跳到n阶有多少种跳法

    解析:
    跳到n阶时,只有可能是n-1阶处再跳1阶,或者可能是n-2阶处再跳2阶
    复合斐波那契数列,动态方程:
    f(n) = f(n-1)+f(n-2)

    int jumpFloor(int n) {
        if(n == 0 || n == 1)
            return n;
        
        int f1 = 0,f2 = 1;
        for(int i = 2; i < n; i++) {
            int tmp = f1 + f2;
            f1 = f2;
            f2 = tmp;
        }
        
        return f2;
    }
    

    相关文章

      网友评论

          本文标题:面试算法题归总

          本文链接:https://www.haomeiwen.com/subject/nfzoqrtx.html