查看: 1754| 回复: 10
跳转到指定楼层
上一主题 下一主题
收起左侧

请大神比较这两种算法复杂度区别

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
我认为这两种空间复杂度和时间复杂度一样,为什么一个通过 一个不通过,求教大家

1.class Solution {
public:
    double myPow(double x, int n) {
        if (n < 0) return 1 / power(x, -n);
        return power(x, n);
    }
    double power(double x, int n) {
        if (n == 0) return 1;
        double half = power(x, n / 2);
        if (n % 2 == 0) return half * half;
        return x * half * half;
    }
};

2. double myPow(double x, int n) {
        if(x==0)return 0;
        if(n==0)return 1;
        if(n==1)return x;
        int m=n;
        if(n<0) m=-m;
        double a=x;
         vector<int>way;
        while(m!=1){
            if(m/2==0){m=m/2;way.push_back(1);}
            else {m=m-1;way.push_back(0);}
        }
        for(int i=0;i<way.size();i++){
            if(way[i]==1)x=x*x;
            else x=x*a;
        }
        if(n<0)return 1/x;
        else return x;
        
    }

上一篇:请问 调用函数和直接写过程 这两种复杂度相同吗
下一篇:原创一个LeetCode的题目分类思路框图
🔗
neoweb 2018-11-15 16:18:13 来自APP | 只看该作者
全局:
第二个方法对吗?不应该是从后往前遍历vector?
回复

使用道具 举报

全局:
我提个corner case
0的任何非0次方为0
但0的0次方为1
回复

使用道具 举报

全局:
所以第二个函数里面 x等于0的判断跟n等于0的判断要换一下顺序
回复

使用道具 举报

🔗
 楼主| chenxianggre 2018-11-15 17:13:55 | 只看该作者
全局:
neoweb 发表于 2018-11-15 16:18
第二个方法对吗?不应该是从后往前遍历vector?

你说的对,但是我改过后还是现实memory limit exceeded, 不通过的例子是0.00001,272727
回复

使用道具 举报

🔗
 楼主| chenxianggre 2018-11-15 17:14:44 | 只看该作者
全局:
梦流星 发表于 2018-11-15 16:39
我提个corner case
0的任何非0次方为0
但0的0次方为1

0的0次方似乎数学不存在意义?
回复

使用道具 举报

🔗
neoweb 2018-11-15 17:48:57 来自APP | 只看该作者
全局:
chenxianggre 发表于 2018/11/15 17:13:55


你说的对,但是我改过后还是现实memory limit exceeded, 不通过的例子是0.00001,272727

可能系统对heap卡的比较严 标准库的话overhead还是挺大的 可以试试bitvec
回复

使用道具 举报

🔗
 楼主| chenxianggre 2018-11-15 17:50:54 | 只看该作者
全局:
neoweb 发表于 2018-11-15 17:48
可能系统对heap卡的比较严 标准库的话overhead还是挺大的 可以试试bitvec

请教下heap bitvec是什么,不知道
回复

使用道具 举报

🔗
neoweb 2018-11-15 18:00:54 来自APP | 只看该作者
全局:
chenxianggre 发表于 2018/11/15 17:50:54


请教下heap bitvec是什么,不知道

去搜一下stack和heap的区别

bitvec是cpp标准库提供的另一个collection 只能放二进制位 更省内存

但其实你都不需要用标准库 你完全可以根据n算出步数上界(2logn) new一个数组存储就够了
回复

使用道具 举报

🔗
stellari 2018-11-16 02:27:29 | 只看该作者
全局:
方法2中,while循环里的if应该是m%2,不是m/2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表