空间复杂度算的是变量的个数

发布时间:2025-06-24 20:13:52  作者:北方职教升学中心  阅读量:077


3.包装类

Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。平均和最坏情况:

最坏情况:任意输入规模的最大运行次数(上界)
平均情况:任意输入规模的期望运行次数
最好情况:任意输入规模的最小运行次数(下界)

例如:在一个长度为N数组中搜索一个数据x
最好情况:1次找到
最坏情况:N次找到
平均情况:N/2次找到
在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N).

2.2.4常见时间复杂度计算举例

例1:计算func2的时间复杂度?

void func2(int N) {        int count = 0;        for (int k = 0; k < 2 * N; k++) {            count++;        }        int M = 10;        while ((M--) > 0) {            count++;        }        System.out.println(count);    }

1基本操作执行了2N+10次,通过推导大O阶方法知道,它的时间复杂度为 O(N)。

3.1基本数据类型和对应的包装类

注:除了 Integer Character, 其余基本类型的包装类都是首字母大写。
例5:计算binarySearch的时间复杂度?
int binarySearch(int[] array, int value) {        int begin = 0;        int end = array.length - 1;        while (begin <= end) {            int mid = begin + ((end - begin) / 2);            if (array[mid] < value)                begin = mid + 1;            else if (array[mid] > value)                end = mid - 1;            else                return mid;        }        return -1;    }

例5基本操作最好执行1次,最坏log₂N次,因为二分查找每次都会排除掉一半的不适合值,则每一次值都为上一次的1/2,所以当存在N个数据时,有总个数N/(2^(砍一半的次数)y) = 1(最后剩下的一个数) ==> y = log₂N,则时间复杂度为O(log₂N)。

3.2装箱和拆箱

int i = 10;    // 装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中    Integer ii = Integer.valueOf(i);    Integer ij = new Integer(i);    // 拆箱操作,将 Integer 对象中的值取出,放到一个基本数据类型中    int j = ii.intValue();

4.泛型

4.1概念

泛型是适用于许多许多类型

2.2时间复杂度

2.2.1概念

一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。第三、
时间效率被称为时间复杂度。栈、

5.泛型类的使用

5.1语法

泛型类<类型实参> 变量名; // 定义一个泛型类引用
new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象

举个例子:

MyArray<Integer> list = new MyArray<Integer>();
注意:泛型只能接受类,所有的基本数据类型必须使用包装类!

5.2类型推导

类型推导即当编译器可以根据上下文推导出类型实参时,可以省略类型实参的填写。

6.2语法

class 泛型类名称<类型形参 extends 类型边界> {
...
}

举个例子:

public class MyArray<E extends Number> {...}MyArray<Integer> l1; // 正常,因为 Integer 是 Number 的子类型MyArray<String> l2; // 编译错误,因为 String 不是 Number 的子类型

tips: 没有指定类型边界E,可以视为E extends Object

7.泛型方法

泛型方法定义语法:

方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) { ... }

下面举个例子给大家看看:

public class Util {    //静态的泛型方法 需要在static后用<>声明泛型类型参数    public static <E> void swap(E[] array, int i, int j) {        E t = array[i];        array[i] = array[j];        array[j] = t;    }}

8.总结

以上内容让大家能够初步认识数据结构的一些基本知识,后面还将继续与大家分享数据结构中的顺序表、队列、大O渐进表示法、链表、