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

算法解题易复杂化如何改善?以LC#2149为例求助

问题:总是把简单问题复杂化,如何改善?

我总是把简单问题复杂化,最终写出可行但繁琐的解决方案,而最优解法却十分简洁。比如在解决LeetCode第2149题《Rearrange Array Elements by Sign》时,我编写了带有嵌套while循环的代码,而最优解仅用了简单的索引技巧(pos从0开始、neg从1开始,每次步长为2)。两种解法的时间复杂度和空间复杂度均为O(n)且都正确,但代码简洁度差异明显。这种情况反复出现,我想知道这在学习初期是否正常,以及该如何改善,目前我为此感到精神焦虑。

我写的代码

public int[] rearrangeArray(int[] nums) {
    int nPointer = 0, pPointer = 0;
    int[] result = new int[nums.length];

    for (int i = 0; i < nums.length / 2; i++) {
        while (pPointer < nums.length) {
            if (nums[pPointer] > 0) break;
            pPointer++;
        }
        while (nPointer < nums.length) {
            if (nums[nPointer] < 0) break;
            nPointer++;
        }
        result[2 * i]     = nums[pPointer++];
        result[2 * i + 1] = nums[nPointer++];
    }
    return result;
}

最优解代码

public int[] rearrangeArray(int[] nums) {
    int pos = 0, neg = 1;
    int[] result = new int[nums.length];

    for (int i = 0; i < nums.length; i++) {
        if (nums[i] > 0) { result[pos] = nums[i]; pos += 2; }
        else              { result[neg] = nums[i]; neg += 2; }
    }
    return result;
}

这是学习初期的正常现象

完全不用焦虑——大多数算法学习者在入门阶段都会经历这个过程。你能写出正确的可行解已经很棒了,这说明你能理解问题、梳理逻辑并实现功能,这是算法能力的核心基础。最优解的简洁性往往是对问题规律的深度提炼,而这种提炼能力需要积累,不是一蹴而就的。

如何改善这种情况?

  • 做完题后强制复盘最优解:不要只满足于提交通过,花5-10分钟拆解最优解的思路——它是抓住了问题的哪个特性?比如这道题,题目明确保证正负元素数量相等,所以可以直接用奇偶索引分别承接正负值,不需要额外遍历寻找元素。把这种问题特性和对应技巧的关联记下来,下次遇到类似场景就能快速复用。
  • 切换思考方式:从“过程导向”到“结果导向”:你写的代码是先“找正元素→找负元素→放到结果对应位置”,属于按步骤执行的过程导向;最优解则是直接对应问题要求的排列规则——“遇到正元素就放到正索引位,遇到负元素就放到负索引位”。下次解题时先问自己:问题最终要的结果是什么?有没有更直接的方式达成这个结果?
  • 积累常见的算法技巧模板:像这种奇偶索引分配、双指针步长控制的技巧,在数组类问题里非常常见。把遇到的这类技巧整理到自己的笔记中,比如“当需要按规则分组填充数组时,可提前为每组分配目标位置指针”,慢慢形成自己的技巧库,遇到类似问题就能快速联想到。
  • 接受“不完美”,逐步迭代优化:不用要求自己第一次就写出最优解。可以先写出能跑通的可行解,再尝试优化——比如写完嵌套循环后,问问自己:能不能减少遍历的次数?能不能把找元素的过程和填充结果的过程合并?通过这样的小步迭代,慢慢训练自己的优化思维。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 00:42:28