按组反转数组
发布: (2026年3月1日 GMT+8 14:08)
2 分钟阅读
原文: Dev.to
Source: Dev.to
问题描述
将数组按给定大小 k 分组后进行逆序。
数组被划分为长度为 k 的连续块(窗口),每个块独立逆序。最后一个块可能少于 k 个元素;它也需要逆序。
思路
- 按步长
k遍历数组(索引0, k, 2k, …)。 - 对每个起始索引
i,逆序子数组arr[i : i+k]。 - 直到遍历到数组末尾为止。
切片操作会自动处理剩余元素少于 k 的边界情况。
实现(Python)
def reverse_in_groups(arr, k):
"""
Reverse the elements of `arr` in groups of size `k`.
Parameters
----------
arr : list
The list to be processed.
k : int
The size of each group.
Returns
-------
list
The list with each group reversed.
"""
n = len(arr)
for i in range(0, n, k):
# Reverse the sub-array from i to i+k
arr[i:i + k] = reversed(arr[i:i + k])
return arr
复杂度
- 时间复杂度:
O(n)– 每个元素最多被访问两次(一次遍历,一次逆序)。 - 空间复杂度:
O(1)额外空间(逆序在原地完成)。
示例
arr = [1, 2, 4, 5, 7]
k = 3
- 块 1:
[1, 2, 4] → [4, 2, 1] - 块 2(边界情况):
[5, 7] → [7, 5]
结果: [4, 2, 1, 7, 5]