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

排序仅含0、1、2的数组时出现超时运行错误求助

解决仅含0、1、2数组排序的超时问题

你的代码出现超时(Time Limit Exceeded)的核心原因是在while循环内部重新定义了局部变量high,覆盖了函数开头声明的high变量。每次循环时,high都会被重置为n-1,导致处理元素2时,high--的操作完全无效,程序陷入无限循环,最终超时。

错误代码的关键问题行

循环内的这行代码直接导致了死循环:

int high = n-1;

这行代码会创建一个新的局部high,和外层的high不是同一个变量,外层的high根本没被修改,循环条件mid < high永远满足,程序无法退出循环。

修正后的代码

class Solution
{
public:
    void sort012(int a[], int n)
    {
        int low = 0;
        int high = n-1;
        int mid = 0;
        
        while(mid <= high)
        { 
            if(a[mid] == 0)
            { 
                swap(a[mid++], a[low++]);
            }
            else if(a[mid] == 2)
            { 
                swap(a[mid], a[high--]);
                // 交换过来的元素可能是0或1,需留在当前位置重新检查,所以mid不递增
            }
            else  // 处理元素1的情况
            {
                mid++;
            }
        }
    }
};

修正要点说明

  • 移除循环内重复定义的int high = n-1;,确保外层的high能正常递减,控制循环边界。
  • 将循环条件从mid < high改为mid <= high,避免遗漏mid和high指向同一元素的情况。
  • 处理元素2时不递增mid:交换到mid位置的元素可能是0或1,需要重新检查,不能直接跳过。
  • 移除多余的mid <= high判断,循环条件已经保证了该范围,简化代码逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:39:20