• python经典百题之数组元素换位


    题目: 有 n 个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数

    程序分析

    我们需要将数组中的前面 n - m 个数顺序向后移动 m 个位置,同时将最后 m 个数移动到数组的前面。这可以通过三步操作来实现:

    1. 将前面 n - m 个数逆序。
    2. 将后面 m 个数逆序。
    3. 将整个数组逆序。

    方法一:逆序操作

    解题思路:

    1. 将前面 n - m 个数逆序。
    2. 将后面 m 个数逆序。
    3. 将整个数组逆序。

    代码:

    def rotate_array(arr, n, m):
        if not arr or n <= 0 or m < 0 or m >= n:
            return arr
    
        # Reverse the first n - m elements
        arr[:n - m] = arr[:n - m][::-1]
        # Reverse the last m elements
        arr[n - m:] = arr[n - m:][::-1]
        # Reverse the entire array
        arr.reverse()
    
        return arr
    
    
    # Test the function
    arr = [1, 2, 3, 4, 5, 6, 7]
    n = 7
    m = 3
    print("Original array:", arr)
    result = rotate_array(arr, n, m)
    print("Array after rotation:", result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    优点:

    • 实现简单,只需要逆序数组多次。

    缺点:

    • 需要逆序数组多次,可能不是最优解。

    方法二:切片操作

    解题思路:

    1. 利用切片将数组分成前面 n - m 个元素和后面 m 个元素。
    2. 将两部分数组交换位置。

    代码:

    def rotate_array(arr, n, m):
        if not arr or n <= 0 or m < 0 or m >= n:
            return arr
    
        arr[:n - m], arr[n - m:] = arr[m:], arr[:n - m]
    
        return arr
    
    
    # Test the function
    arr = [1, 2, 3, 4, 5, 6, 7]
    n = 7
    m = 3
    print("Original array:", arr)
    result = rotate_array(arr, n, m)
    print("Array after rotation:", result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    优点:

    • 利用切片操作实现,简洁直观。

    缺点:

    • 需要多次切片操作,可能不是最优解。

    方法三:数组拼接

    解题思路:

    1. 将前面 n - m 个数和后面 m 个数分别取出。
    2. 将后面 m 个数和前面 n - m 个数拼接成新数组。

    代码:

    def rotate_array(arr, n, m):
        if not arr or n <= 0 or m < 0 or m >= n:
            return arr
    
        rotated_arr = arr[m:] + arr[:m]
    
        return rotated_arr
    
    
    # Test the function
    arr = [1, 2, 3, 4, 5, 6, 7]
    n = 7
    m = 3
    print("Original array:", arr)
    result = rotate_array(arr, n, m)
    print("Array after rotation:", result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    优点:

    • 使用数组拼接实现,简洁直观。

    缺点:

    • 需要多次拼接数组,可能不是最优解。

    总结与推荐

    • 推荐方法: 方法一,逆序操作。虽然需要逆序数组多次,但实现简单易懂。
    • 次选方法: 方法二,切片操作。利用切片实现,简洁直观。
    • 备选方法: 方法三,数组拼接。使用数组拼接实现,也能得到正确结果,但可能不是最优解。

    综上所述,推荐使用逆序操作(方法一)实现数组中的向后移动和交换。

  • 相关阅读:
    如何用python给女神写一封照片情书?亲测表白率100%~
    【Android】画面卡顿优化列表流畅度三之RecyclerView刷新机制notifyItemRangeInserted
    身份证测试图片
    〖Python网络爬虫实战㉕〗- Ajax数据爬取之Ajax 案例实战
    docker harbor 私有仓库
    unity scene场景调整好后让game窗口的视角与scene相同
    AI人机对话-无能版
    Python进阶复习-Pandas库
    Git最佳实践:git常用命令和原理
    数据结构与算法 | 图(Graph)
  • 原文地址:https://blog.csdn.net/yechuanhui/article/details/133454716