常用算法时间复杂度

二分查找的时间复杂度为:

首先在n个元素中查找, 然后在n/2个元素中查找, 再在n/4个元素中查找...直到为1, 相当于n经过多少次除以2等于1, 所以其时间复杂度为logN

int binarySearch(int arr[], int target, int n) {
    int left = 0, right = n - 1;
    
    while (left <= right) {
        int pivot = (left + right)/2;
        if (arr[pivot] == target) return pivot;
        if (arr[pivot] < target) left = pivot + 1;
        else right = pivot - 1;
    }
    
    return -1;
}

整形转字符串的时间复杂为:

相当于N经过多少次除以10等于0, 所以其时间复杂度为logN

/** 数字转字符串*/
func intToString(_ num: Int) -> String {
    
    var temNum = num
    
    var s = ""
    while temNum>0 {
        s += "\(temNum%10)"
        temNum /= 10
    }
    
    s.reversed()
    return s
}

下面的算法的时间复杂度为N*logN

第一层for循环,相当于sz从1开始, 经过多少次乘以2等于n, 或者n经过多少次除以2等于1, 所以第一层的时间复杂度为logN

void hello(int n) {
    
    for (int sz = 1; sz < n; sz += sz) {
        
        for (int i = 1; i < n; i++) {
            printf("hello world");
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/jiefangzhe/p/12964438.html