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

有没有更Pythonic的写法?求优化判断移除最多一个元素获严格递增序列的代码

代码优化思路:判断移除最多一个元素后是否为严格递增序列

你的代码功能是正确的,但存在可以优化的空间,主要集中在时间效率和操作开销上,以下是具体的优化思路和实现:

原代码的问题分析

  1. 时间复杂度高:外层循环遍历每个元素(O(n)),每次循环里的pop/insert操作是O(n),调用hh函数又要遍历一次数组(O(n)),整体时间复杂度达到O(n²),对于大规模数组性能会很差。
  2. 不必要的数组修改:每次pop再insert的操作完全是冗余的,不需要真的修改原数组就能完成检查。
  3. 冗余函数调用:hh函数的逻辑可以整合到主流程中,避免额外的函数调用开销。

优化思路

核心方向:一次遍历+逻辑判断替代数组修改

不需要逐个删除元素再检查,而是在一次遍历中记录递减的次数,同时判断当前递减是否可以通过移除单个元素修复,全程只需要遍历数组一次,时间复杂度降到O(n)。

优化后的代码实现

方法1:一次遍历直接判断(最优)

def solution(sequence):
    remove_count = 0
    n = len(sequence)
    for i in range(n - 1):
        if sequence[i] >= sequence[i + 1]:
            remove_count += 1
            if remove_count > 1:
                return False
            # 两种修复可能:移除当前元素 或 移除下一个元素
            # 如果当前是第一个元素,或者前一个元素小于下一个元素,移除当前元素即可继续检查
            if i == 0 or sequence[i - 1] < sequence[i + 1]:
                continue
            # 否则必须移除下一个元素,将下一个元素的值替换为当前元素(模拟跳过下一个)
            else:
                sequence[i + 1] = sequence[i]
    return remove_count <= 1

方法2:跳过指定索引检查(更直观)

如果不想修改原数组,可以通过跳过指定索引的方式模拟移除操作,只在遇到递减时才检查两种跳过情况:

def solution(sequence):
    def is_strictly_increasing(arr, skip_idx):
        prev = float('-inf')
        for idx, num in enumerate(arr):
            if idx == skip_idx:
                continue
            if num <= prev:
                return False
            prev = num
        return True

    error_count = 0
    for i in range(len(sequence) - 1):
        if sequence[i] >= sequence[i + 1]:
            error_count += 1
            if error_count > 1:
                return False
            # 检查跳过当前元素 或 跳过下一个元素是否能让数组递增
            if not (is_strictly_increasing(sequence, i) or is_strictly_increasing(sequence, i + 1)):
                return False
    return True

优化点说明

  1. 时间效率提升:两种方法的时间复杂度都是O(n),相比原代码的O(n²),处理大数组时性能提升明显。
  2. 减少冗余操作:避免了pop/insert这类O(n)的数组修改操作,节省了内存和时间开销。
  3. 提前终止逻辑:一旦发现需要移除超过一个元素,或者遇到无法通过单个元素移除修复的递减情况,直接返回结果,避免不必要的后续遍历。

测试用例验证:

  • solution([1,3,2,1]) 返回 False
  • solution([1,3,2]) 返回 True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:42:43