小编Ray*_*ght的帖子

为什么这个 For 循环的时间复杂度是 O(N)?

有没有办法从直觉或证明中理解为什么以下的时间复杂度是 O(N)?

它的作用基本上是给定一个整数的输入,我们在进行反向扫描array时创建firstSmallLeft相同长度的数组 where firstSmallLeft[i]= 第一个索引 where array[index]< 。(即,对于索引 i,它从 i-1, ... , j 扫描,直到找到第一个较小的元素,使得 array[j] < array[i])array[i]

例如,如果输入 = [3,2,5,6,4,1].
firstSmallLeft 会是[-1,-1,1,2,1,-1]

//input int[] array
int[] firstSmallLeft = new int[array.length];
firstSmallLeft[0] = -1;
for(int i = 1; i < array.length; i ++){
    int cur = i -1;
    while (cur >=0 && array[cur] >= array[i]){
        cur = firstSmallLeft[cur];
    }

    firstSmallLeft[i] = cur;
}
Run Code Online (Sandbox Code Playgroud)

java algorithm time-complexity

1
推荐指数
1
解决办法
211
查看次数

标签 统计

algorithm ×1

java ×1

time-complexity ×1