You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于三色数组重排实例验证Big-O复杂度理解的正确性

关于荷兰国旗问题解法的复杂度分析确认

你的理解完全正确!这是解决荷兰国旗问题的经典计数法,咱们来详细验证一下你的复杂度分析:

时间复杂度:O(n)

你的算法执行了两次完整的数组遍历:

  • 第一次遍历统计WHITE和BLUE元素的数量,遍历次数为n,时间开销是O(n)
  • 第二次遍历根据计数重写数组元素,遍历次数同样为n,时间开销也是O(n)

大O表示法关注的是增长趋势,常数系数会被忽略,因此O(2n)等价于O(n),完全符合题目要求的线性时间复杂度。

空间复杂度:O(1)

你的算法只使用了两个固定大小的计数变量numW和numB,它们的内存占用不随数组元素总数n的变化而改变——不管n是10还是10000,额外使用的空间都是恒定的。这种不依赖输入规模的额外空间开销,就是我们说的常数空间复杂度O(1),满足题目的要求。

顺便提一句,这个解法非常直观,不过荷兰国旗问题还有单遍历的三指针解法(原地交换元素),感兴趣的话可以深入了解,但你的解法已经完美符合题目给出的复杂度要求啦。

你的伪代码格式化后如下:

numW = numB = 0 
for i = 0 to n-1:  // 注:这里建议修正为n-1,避免数组越界
    if ARRAY[i] == WHITE: 
        numW++ 
    else if ARRAY[i] == BLUE: 
        numB++ 
for i = 0 to n-1: 
    if numW > 0: 
        ARRAY[i] = WHITE 
        numW-- 
    else if numB > 0: 
        ARRAY[i] = BLUE 
        numB-- 
    else: 
        ARRAY[i] = RED 

(小提示:原伪代码里的to n可能会触发数组越界,通常数组索引范围是0到n-1,所以这里做了小调整)

内容的提问来源于stack exchange,提问作者basil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:45:45