18数据结构与算法刷题之【数论】篇

前言

除了去年11月份以及今年近几月的算法刷题之外,只有在当时20年蓝桥杯准备的时候才刷过一些题,在当时就有接触到一些动归、递归回溯、贪心等等,不过那会也还是一知半解,做的题目也特别少,因为考虑到之后面试有算法题以及数据结构算法对于一个程序员十分重要,我也开始了刷题之路。

我目前的学习数据结构与算法及刷题路径:

1、学习数据结构的原理以及一些常见算法。

2、代码随想录:跟着这个github算法刷题项目进行分类刷,在刷题前可以学习一下对应类别的知识点,而且这里面每道题都讲的很详细。

3、牛客网高频面试101题:牛客网—面试必刷101题,在刷的过程中可以在leetcode同步刷一下。

4、接下来就是力扣上的专栏《剑指offer II》《程序员面试金典(第 6 版)》…有对应的精选题单来对着刷即可。

5、大部分的高频面试、算法题刷完后,就可以指定力扣分类专栏进行一下刷题了。

刚开始刷的时候真的是很痛苦的,想到去年一道题可能就需要好几小时,真的就很难受的,不过熬过来一切都会好起来,随着题量的增多,很多题目你看到就会知道使用什么数据结构或者算法来去求解,并且思考对应的时间空间复杂度,并寻求最优解,我们一起加油!

我的刷题历程

截止2022.8.18:

1、牛客网101题(其中1题是平台案例有问题):image-20220818095030215

2、剑指offerII:image-20220818095104757

力扣总记录数:image-20220818095148897

加油加油!

剑指offer

剑指 Offer 16. 数值的整数次方【中等】

题目链接:剑指 Offer 16. 数值的整数次方

题目内容:实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。

思路1:

1、暴力相乘【超时】

复杂度分析:时间复杂度O(N);空间复杂度O(1)

class Solution {

    //溢出问题-2147483648,int最大值2147483647
    public double myPow(double x, int n) {
        if (n == 0 || x == 1) {
            return 1;
        }
        long num = (long)n;
        double res = x;
        for (int i = 1; i < Math.abs(num); i++) { //Math.abs(-2147483647) => -2147483647,这是溢出的结果
            res *= x;
        }
        return n < 0 ? (1 / res) : res;
    }
}

2、快速幂

复杂度分析:时间复杂度O(logn);空间复杂度O(1)

class Solution {

    //3 6
    //3x3x3x3x3x3  6次
    //3 7
    //3x3x3 x3x 3x3x3
    //3x3x3=27 27x3=81 4次
    public double myPow(double x, int n) {
        //边界问题
        if (n == 0 || x == 1) {
            return 1;
        }
        long N = (long)n;
        double num = pow(x, Math.abs(N));
        if (n < 0) {
            return 1 / num;
        }
        return num;
    }

    public double pow(double x, long n) {
        if (n == 0 || n == 1) {
            return x;
        }
        double num = pow(x, n / 2);
        //奇数次
        if (n % 2 == 1) {
            return num * num * x;
        }else {
            //偶数次
            return num * num;
        }
    }
}

image-20220815161942461

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长路 ㅤ   

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值