数组反转查询问题求解:按指定操作反转数组子区间
数组区间反转操作的解决方案
核心逻辑
对给定数组依次执行每个反转操作:
- 取出每个操作的起始索引
start和结束索引end - 交换数组中
start和end位置的元素,然后将start加1、end减1,重复这个过程直到start >= end,完成区间内元素的反转
示例1分步计算
初始数组:[1, 2, 3]
- 执行操作
[0,2]:反转整个数组 →[3, 2, 1] - 执行操作
[1,2]:反转索引1到2的元素 →[3, 1, 2] - 执行操作
[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
相关产品推荐
相关产品推荐

