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

数组反转查询问题求解:按指定操作反转数组子区间

数组区间反转操作的解决方案

核心逻辑

对给定数组依次执行每个反转操作:

  • 取出每个操作的起始索引start和结束索引end
  • 交换数组中start和end位置的元素,然后将start加1、end减1,重复这个过程直到start >= end,完成区间内元素的反转

示例1分步计算

初始数组:[1, 2, 3]

  1. 执行操作[0,2]:反转整个数组 → [3, 2, 1]
  2. 执行操作[1,2]:反转索引1到2的元素 → [3, 1, 2]
  3. 执行操作[0,2]:再次反转整个数组 → [2, 1, 3]
    最终结果:[2, 1, 3]

示例2最终结果

初始数组:[640, 26, 276, 224, 737, 677, 893, 87, 422, 30]
依次执行所有操作后,最终结果为:[893, 677, 737, 224, 30, 422, 87, 276, 26, 640]

通用Python实现

def reverse_subarray(arr, operations):
    # 复制原数组避免修改输入
    result = arr.copy()
    for start, end in operations:
        while start < end:
            # 交换两个位置的元素
            result[start], result[end] = result[end], result[start]
            start += 1
            end -= 1
    return result

# 测试示例1
arr1 = [1, 2, 3]
ops1 = [[0, 2], [1, 2], [0, 2]]
print(reverse_subarray(arr1, ops1))  # 输出 [2, 1, 3]

# 测试示例2
arr2 = [640, 26, 276, 224, 737, 677, 893, 87, 422, 30]
ops2 = [[0, 9], [2, 2], [5, 5], [1, 6], [5, 6], [5, 9], [0, 8], [6, 7], [1, 9], [3, 3]]
print(reverse_subarray(arr2, ops2))  # 输出 [893, 677, 737, 224, 30, 422, 87, 276, 26, 640]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:06:18