LeetCode 50 题解 -- 分治算法

Java 源码解读
Java 集合类源码,JUC 源码解读
wangxiaoming

两种方式都为通过,很奇怪,超时

/**
 * 类说明 实现 pow(x, n) ,即计算 x 的 n 次幂函数。
 * 
 * 示例 1:
 * 
 * 输入: 2.00000, 10 输出: 1024.00000
 * 
 * 示例 2:
 * 
 * 输入: 2.10000, 3 输出: 9.26100
 * 
 * 示例 3:
 * 
 * 输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25
 * 
 * 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/powx-n
 * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
 * 
 * <pre>
 * Modify Information:
 * Author        Date          Description
 * ============ =========== ============================
 * wangm          2020年5月14日    Create this file
 * </pre>
 * 
 */

public class LeetCode50 {

    
    public double myPow(double x, int n) {
        if(x == 1|| x== -1 ){
            return x;
        }
        if(n == 0){
            return 1;
        }
        if (n < 0) {
            x = 1 / x;
            n = -n;
        }
        double pow = 1.0;
        while (n != 0) {
            if ((n & 1) == 1) {
                pow *= x;
            }
            x *= x;
            n >>= 1;
        }
        return pow;
    }
    public double myPow1(double x, int n) {
        if (n == 0) {
            return 1;
        }
        if(x == 1){
            return 1;
        }
        if (n < 0) {
            return 1.0 / myPow1(x, -n);
        }
        if (n % 2 == 0) {
//            return myPow(x, n >> 1)*myPow(x, n >> 1); 会超时
            return myPow1(x*x, n >> 1);
        }
//        return x * myPow(x, n >> 1)*myPow(x, n >> 1);
        return x * myPow1(x*x, n >> 1);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(new LeetCode50().myPow(2, 10));
        System.out.println(new LeetCode50().myPow(2, -2));
        System.out.println(new LeetCode50().myPow(2.1, 3));
    }

}

分治算法模板

def divide_comquer(problem, param1, parana, ... )

#recursion terminator 
if problem is None:
    print result
return 
# prepare data 
data =  prepare_data(problem)
spLit_problems = split_problem(problem_data)
# conquer subproblems
subresult1 = self.divide_conquer(subproblems[0],p1,...)
subresult2 self.divide_conquer(subproblems[l], pl,...)
subresult3= self.divide_conquer(subproblems[2], pl,...)
... 
# proress anmd generate the FInal nesult 
result = process_ result(subresultl, subresult2, subresult3, ...)
wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值