时间复杂度

注意一:学习数据结构的方法

1:多写代码

2:多画图

3:多调试 知道代码是按什么逻辑操作的

(代码多写几遍,5》3》2)

注意二:两个for循环并列的时间复杂度是m+n 或O(n)

public void func(int m ,int n){
        for (int i = 0; i < m; i++) {
            System.out.println(i);
        }

        for (int i = 0; i < n; i++) {
            System.out.println(i);
        }
    }

注意二:二分查找的时间复杂度计算

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;
}

在这里插入图片描述

注意三:递归的时间复杂度计算

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

在这里插入图片描述

总结:递归时间复杂度的计算:递归的次数 * 每次递归之后执行语句的次数

注意四:计算斐波那契递归的时间复杂度?

// 计算斐波那契递归fibonacci的时间复杂度?
int fibonacci(int N) {
return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}

在这里插入图片描述

在这里插入图片描述

复杂度的计算要结合代码思想来计算的,不能管靠看一眼代码就给出复杂度

注意五:计算斐波那契额数列的空间复杂度

int fibonacci(int N) {
return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}

在这里插入图片描述

O(n)

注意七:计算冒泡排序的空间复杂度

// 计算bubbleSort的空间复杂度?
void bubbleSort(int[] array) {
  for (int end = array.length; end > 0; end--) {
    boolean sorted = true; //开辟一个变量
    for (int i = 1; i < end; i++) {
      if (array[i - 1] > array[i]) {// for循环里面没有开辟一个变量
        Swap(array, i - 1, i);
        sorted = false;
     }
   }
    if (sorted == true) {
      break;
   }
      
      O1

i 所占的临时空间 从for循环开始到结束,这段时间一直占1个空间,m 会开辟n次空间但是每次结束都会销毁空间,所以可以说m一直临时占用1个空间
所以空间复杂度是1+1 = 2 即O(1)。

// 计算bubbleSort的空间复杂度?
void bubbleSort(int[] array) {
    int[] temp = new int[array.length];    //重新开辟了一个数组
    
  for (int end = array.length; end > 0; end--) {
    boolean sorted = true; 
    for (int i = 1; i < end; i++) {
      if (array[i - 1] > array[i]) {
        Swap(array, i - 1, i);
        sorted = false;
     }
   }
    if (sorted == true) {
      break;
   }
      
      O(n)

注意 : 空间复杂度算的是变量的个数. 也可以说是 开辟的最深的空间

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chen森柏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值