1. 程式人生 > 實用技巧 >【40講系列6】遞迴、分治

【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.陣列中出現次數超過一半的數字