掌握时间复杂度, 编写高效代码

White graces:个人主页

专栏推荐:Java入门知识

 内容推荐:巧用抽象类与接口,打造高效Java程序(下)

今日诗词:昨夜星辰昨夜风,画楼西畔桂堂东


⛳️点赞 ☀️收藏⭐️关注卑微小博主

⛳️点赞 ☀️收藏⭐️关注卑微小博主


目录

思维导图

 一. 时间复杂度

(1). 一般程序时间复杂度

(2). 递归时间复杂度

(3). 大O的渐近表示法

(4). 时间复杂度三种情况

(5).空间复杂度

二. 包装类

(1). 装箱

(2). 拆箱

结语+美图分享


思维导图

掌握时间复杂度, 编写高效代码_第1张图片


 一. 时间复杂度

概念: 程序算法粗略执行的次数

常数级别:算法的执行时间和常数规模无关, 也就是说输入的数据数量、大小如何,

                       算法的执行时间都保持不变

(1). 一般程序时间复杂度

例如

    // 请计算一下func1基本操作执行了多少次?
    void func1(int N){
        int count = 0;
        for (int i = 0; i < N ; i++) {
            for (int j = 0; j < N ; j++) {
                count++;
            }
        }
        for (int k = 0; k < 2 * N ; k++) {
            count++;
        }
        int M = 10;
        while ((M--) > 0) {
            count++;
        }
        System.out.println(count);
    }

掌握时间复杂度, 编写高效代码_第2张图片

(2). 递归时间复杂度

递归时间复杂度计算

递归时间复杂度 = 递归次数 * 每次递归后执行的次数

举例解释

    // 计算阶乘递归factorial的时间复杂度?
    long factorial(int N) {
        return N < 2 ? N : factorial(N-1) * N;
    }

掌握时间复杂度, 编写高效代码_第3张图片

(3). 大O的渐近表示法

大O的渐近表示法

三要素: 1. 用数字取代常数项

                  2. 取最高阶项

                  3. 除去最高项的系数

例如上题

掌握时间复杂度, 编写高效代码_第4张图片

(4). 时间复杂度三种情况

最好情况: 输入数据, 算法最小运行时间

平均情况: 所有输入, 算法平均运行时间

最坏情况: 输入数据, 算法最大运行时间

举例解释: 

比如猜数字(1-10): 我们最好情况一次就猜中, 最坏就第十次猜中, 平均就第5-6左右猜中

我们一般取最坏情况作为算法的时间复杂度,如果最坏情况下都比其他算法效率高

那么这个算法就是一个优秀的算法

大O的渐近表示法经典练习题: 《大O的渐近表示法经典题目》

(5).空间复杂度

概念: 算法临时占用空间的量度

一般也使用大O的渐近法表示

注意: 空间复杂度不是占用多少字节, 他只是描述占用空间的量度

举例

掌握时间复杂度, 编写高效代码_第5张图片


掌握时间复杂度, 编写高效代码_第6张图片


二. 包装类

作用: 将基本数据类型封装成对象

 基本数据类型的包装类 

掌握时间复杂度, 编写高效代码_第7张图片

(1). 装箱

概念: 把基本数据类型放到包装类型

显示装箱: 手动调用valueOf方法装箱

自动装箱: 编译器自动调用valueOf装箱

掌握时间复杂度, 编写高效代码_第8张图片

(2). 拆箱

概念: 将包装类型放到基本数据类型

显示拆箱: 手动调用编译器Value方法拆箱

自动拆箱: 编译器自动调用Value方法拆箱

掌握时间复杂度, 编写高效代码_第9张图片

我们知道了装箱拆箱的概念,那么我们来看一看下面的代码

public class test {
    //下列代码输出什么,为什么?
    public static void main(String[] args) {
            Integer a = 127;
            Integer b = 127;
            Integer c = 128;
            Integer d = 128;
            System.out.println(a == b);
            System.out.println(c == d);
    }
}

掌握时间复杂度, 编写高效代码_第10张图片


结语+美图分享

✨谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"✨

⭐️点赞收藏加关注,学习知识不迷路⭐️

✔️✔️✔️✔️

⛳️点赞☀️收藏⭐️关注

⛳️点赞☀️收藏⭐️关注

⛳️点赞☀️收藏⭐️关注

‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️

你可能感兴趣的:(数据结构基础知识,算法,数据结构)