【40讲系列6】递归、分治

一、理论

二、典型例题

☆☆①:快速幂->实现计算x的n次幂函数(LC50、剑指12.数值的整数次方)【字节面试】

思路:采用分治的思想,时间复杂度为O(logn)

class Solution {
    public double myPow(double x, long n) {
        // 方法1:递归
        /*
        if (n == 0) return 1.0;

        if (n < 0) return 1 / myPow(x,-n);
        if ((n & 1) == 1){
            return x * myPow(x,n-1); // n为奇数
        }
        return myPow(x * x,n/2);  // n为偶数
        */
        //  方法2:非递归
        // 思想是:每次把x扩大一倍,同时把幂次n/2,直至将幂降到1
        if (x == 0) return 0.0;
        double res = 1.0;
        if (n < 0){
            x = 1 / x;
            n = -n;
        }
        while (n > 0){
            if ((n & 1) == 1){ // 奇数时,会多出一个x
                res *= x;
            }
            x *= x;
            n >>= 1;
        }
        return res;
    }
}

 

②:找出数组中出现次数大于 n/2 的元素(LC169、剑指28.数组中出现次数超过一半的数字

 

posted @ 2020-11-21 20:59  不学无墅_NKer  阅读(115)  评论(0编辑  收藏  举报