[LeetCode] Pow(x, n) 二分搜索

Implement pow(xn).

Hide Tags

Math Binary Search


题目很简单的。

class Solution {
public:
    double pow(double x, int n) {
        if(n==0)    return 1;
        bool nNeg = false;
        long long int nn = n;
        if(n<0){
            nn = - nn ;
            nNeg  =true;
        }
        bool xNeg = false;
        if(x<0){
            x = -x;
            if(n%2==1)
                xNeg = true;
        }
        double ret = 1;
        while(nn){
            if(nn&1)
                ret *= x;
            x *=x;
            nn>>=1;
        }
        if(nNeg==true)
            ret = 1/ret;
        if(xNeg==true)
            return -ret;
        return ret;
    }
};
时间: 2024-10-19 05:57:09

[LeetCode] Pow(x, n) 二分搜索的相关文章

[LeetCode] Pow(x, n) (二分法)

Implement pow(x, n). 刚开始没想到,后来看remlost的博客才写出来,代码很简练: class Solution { public: double pow(double x, int n) { if(n<0) return 1/power(x,-n); else return power(x,n); } private: double power(double x, int n){ if(n==0) return 1; double v = power(x,n/2); if

LeetCode: Pow(x, n) [049]

[题目] Implement pow(x, n). [题意] 实现pow(x, n) [思路] 最直接的思路是用一个循环,乘n次的x. 当n的值较小的时候还好,当n非常大时,时间成本就非常高.加入n=INT_MAX, 也就是21亿多次循环,你可以试想一下. 在这种情况下,我们需要快速的乘完n个x,采用尝试贪心的方法,即滚雪球方式的翻倍相乘 注意:几种特殊情况 1. n=0: 2. n<0; [代码] class Solution { public: double pow(double x, in

[leetcode]Pow(x, n) @ Python

原题地址:https://oj.leetcode.com/problems/powx-n/ 题意:Implement pow(x, n). 解题思路:求幂函数的实现.使用递归,类似于二分的思路,解法来自Mark Allen Weiss的<数据结构与算法分析>. 代码: class Solution: # @param x, a float # @param n, a integer # @return a float def pow(self, x, n): if n == 0: return

LeetCode——Pow(x, n)

Implement pow(x, n). 原题链接:https://oj.leetcode.com/problems/powx-n/ public double pow(double x, int n) { if(n== 0) return 1; if(n == 1) return x; if(n % 2 ==0) return pow(x*x,n/2); else{ if(n > 0) return x*pow(x*x,n/2); else return pow(x*x,n/2)/x; } }

leetcode pow(x,n)实现

题目描述: 自己实现pow(double x, int n)方法 实现思路: 考虑位运算.考虑n的二进制表示形式,以n=51(110011)为例,x^51 = x^1*x^2*x^16*x^32,因此每次将n无符号右移一位,并将x取当前值的平方,如果n右移后末位 为1,则将res*x.考虑特殊情况,当n为Integer.MIN_VALUE时,此时-n=Integer.MAX_VALUE+1,我第一次就是没有考虑到这个边界情况出错的... 该方法通过扫描n的二进制表示形式里不同位置上的1,来计算x

[LeetCode] Pow(x, n) 求x的n次方

Implement pow(x, n). 这道题让我们求x的n次方,如果我们只是简单的用个for循环让x乘以自己n次的话,未免也把LeetCode上的想的太简单了,一句话形容图样图森破啊.OJ因超时无法通过,所以我们需要优化我们的算法,使其在更有效的算出结果来.我们可以用递归来折半计算,每次把n缩小一半,这样n最终会缩小到0,任何数的0次方都为1,这时候我们再往回乘,如果此时n是偶数,直接把上次递归得到的值算个平方返回即可,如果是奇数,则还需要乘上个x的值.还有一点需要引起我们的注意的是n有可能

LeetCode -- Pow(x, n)

题目描述: Implement pow(x, n). 思路: 如果n为偶数:MyPow(x,n) = MyPow(x,n/2) 的平方如果n为奇数:MyPow(x,n) = x * MyPow(x, (n-1)/2)的平方 实现代码: public class Solution { public double MyPow(double x, int n) { if(n <= 2){ return Math.Pow(x, n); } if(n % 2 == 0){ var y = MyPow(x,

LeetCode: Pow(x, n) 解题报告

Pow(x, n) Implement pow(x, n). SOLUTION 1: 使用二分法. 1. 负数的情况,使用以下的公式转化为求正数power,另外,考虑到MIN_VALUE可能会造成越界的情况,我们先将负数+1: X^(-n) = X^(n + 1) * XX^n = 1/(x^(-n)) 2. Base case: pow = 0, RESULT = 1; 3. 正数的时候,先求n/2的pow,再两者相乘即可. 当n = -2147483648 必须要特别处理,因为对这个数取反会

[LeetCode] Search Insert Position 二分搜索

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You may assume no duplicates in the array. Here are few examples.[1,3,5,6], 5 → 2[1,3,5,6], 2 →