时间、空间复杂度和Big O

2020-09-14  本文已影响0人  hewolf

分析时间和空间复杂度的重要性

Big O

空间复杂度

Big O计算方法

O(N+8)= O(N)
O(N2+N) = O(N2)

例题

斐波那契数

斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
给定 N,计算 F(N)。

func fib(N int) int {
    if N <= 0 {
        return 0
    }
    if N == 1 {
        return 1
    }
    return fib(N-1)+fib(N-2)
}

搜素插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5
输出: 2

解法-利用二分法:

func searchInsert(nums []int, target int) int {
    if len(nums) == 0{
        return 0
    }
    start := 0
    high := len(nums)-1
    for start <= high {
        mid := (start+high)/2
        num := nums[mid]
        if target == num{
            return mid
        }else if(target > num) {
            start = mid + 1
        } else {
            high = mid-1
        }
    }
    return start
}

常用算法时间复杂度

算法 时间复杂度 空间复杂度
深度优先遍历 O(|E|+|V|) O(|V|)
广度优先遍历 O(|E|+|V|) O(|V|)
快速排序 O(N2) O(N)
归并排序 O(NlogN) O(N)
冒泡排序 O(N2) O(1)
插入排序 O(N2) O(1)
上一篇 下一篇

猜你喜欢

热点阅读