按组反转数组

发布: (2026年3月1日 GMT+8 14:08)
2 分钟阅读
原文: Dev.to

Source: Dev.to

问题描述

将数组按给定大小 k 分组后进行逆序。
数组被划分为长度为 k 的连续块(窗口),每个块独立逆序。最后一个块可能少于 k 个元素;它也需要逆序。

思路

  1. 按步长 k 遍历数组(索引 0, k, 2k, …)。
  2. 对每个起始索引 i,逆序子数组 arr[i : i+k]
  3. 直到遍历到数组末尾为止。

切片操作会自动处理剩余元素少于 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]

0 浏览
Back to Blog

相关文章

阅读更多 »

不糟糕的语义失效

缓存问题 如果你在 Web 应用上工作了一段时间,你就会了解缓存的情况。你加入缓存,一切都变快了,然后有人……