当前位置: 首页 > article >正文

LeetCode 189. Rotate Array 解题思路和python代码

题目
Given an integer array nums, rotate the array to the right by k steps, where k is non-negative.

Example 1:

Input: nums = [1,2,3,4,5,6,7], k = 3
Output: [5,6,7,1,2,3,4]
Explanation:
rotate 1 steps to the right: [7,1,2,3,4,5,6]
rotate 2 steps to the right: [6,7,1,2,3,4,5]
rotate 3 steps to the right: [5,6,7,1,2,3,4]
Example 2:

Input: nums = [-1,-100,3,99], k = 2
Output: [3,99,-1,-100]
Explanation:
rotate 1 steps to the right: [99,-1,-100,3]
rotate 2 steps to the right: [3,99,-1,-100]

Constraints:

1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
0 <= k <= 105

Follow up:

Try to come up with as many solutions as you can. There are at least three different ways to solve this problem.
Could you do it in-place with O(1) extra space?

解题思路
题目要求将array向右rotate k步。
我们的思路是先将整个array进行reverse,再将前k个进行reverse,最后将剩余的进行reverse。

例如,nums = [1, 2, 3, 4, 5, 6, 7]和k = 3。
reverse整个array,[7, 6, 5, 4, 3, 2, 1]。
reverse前3个elements,[5, 6, 7, 4, 3, 2, 1]。
reverse剩余的elements,[5, 6, 7, 1, 2, 3, 4]。

space complexity等于O(1)。

class Solution(object):
    def rotate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        n = len(nums)
        k = k%n

		# Helper function to reverse elements in the array from index 'start' to 'end'
        def reverse(start, end):
            while start < end:
                nums[start], nums[end] = nums[end], nums[start]
                start += 1
                end -= 1

        reverse(0, n-1)

        reverse(0, k-1)

        reverse(k, n-1)

        return nums

http://www.kler.cn/news/340251.html

相关文章:

  • 程序传入单片机的过程,以Avrdude为例分析
  • webm格式怎么转换成mp4?值得给你推荐的几种简单方法
  • 音频文件压缩,这些压缩操作不错
  • 2025 SSM与SpringBoot计算机毕业设计选题推荐【2025Java方向】
  • 初学Java基础Day12---数组的增删改查,可变参数 Arrays工具类
  • 自学数据库-MYSQL
  • 案例-博客页面简单实现
  • 使用C#和WCF创建并托管简单服务的指南
  • 儿童(青少年)可以参加哪些含金量高的比赛?
  • C++关于树的基础知识
  • 线性回归详解
  • SpringBoot项目打成jar包,在其他项目中引用
  • SpringBoot环境下古典舞交流平台的快速开发
  • 一分钟掌握 Java23 新特性
  • 关于Generator,async 和 await的介绍
  • 【p2p、分布式,区块链笔记 UPNP】: Libupnp的线程池简述
  • MFC项目如何使用hiredis库连接redis
  • 【aws】从s3里拉取驱动 需要后台创建凭证
  • springboot 整合 rabbitMQ(1)
  • 西门子模块6ES7336-4GE00-0AB0