算法之-----时间复杂度和空间复杂度

平时用的少,经常忘记,这里记录下时间复杂度的概念

复杂度是算法的一种标记方法。用O表示,通常读为big O

O的包含了时间复杂和空间复杂度

这里就只说时间复杂度。

时间复杂度的概念,个人总结,可能不太准确。

时间复杂度,即标记一个问题,随着问题规模的变化,所需要花费时间的关系。时间复杂度就是问题规模和解决问题时间的关系。

这里有两个要素:1,问题规模,2,时间t

问题规模n为变量。随着n的增大,解决时间的变化。

根据自己的理解,时间复杂度和问题规模就是一个数学问题,我画了个几个图

上图是线性关系的图,在代码层理解的话,假设解决问题规模和解决问题的时间是线性关系就如上图。时间复杂度可表示为O(n)

如遍历数组一次,数组的长度为n,n为问题规模,遍历完数组的时间即为O,假设遍历数组长度为1的数组所需要的时间是1,那么n=1,O=1,n=2,O=2……n=n,O=n

那么他们时间复杂度表示就为O(n)

指数型的时间复杂度,如最近在LeetCode中刷题所刷到的题,两数之和的代码如下

class Solution {
    public int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[j] == target - nums[i]) {
                    return new int[] { i, j };
                }
            }
        }
        throw new IllegalArgumentException("No two sum solution");
    }
}

其中的问题规模n=nums.length,遍历两次,且是内部遍历。

n和O的关系是O=n²

时间复杂度为O(n²)

空间复杂度,O(1)

空间复杂度,在程序中就是解决问题所占增量的n存变化。

上诉代码中内存占用并不会随着n的变化而变化。故而为O(1)

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值