当前位置:   article > 正文

leetcode每日一题—189.旋转数组_java 旋转数组,给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负

java 旋转数组,给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负

题目:
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
在这里插入图片描述
解答:

方法一:先局部,再全局


class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        n=len(nums)
        def invert(A,start,end):
            t=(end-start+1)//2
            for i in range(t):
                A[start+i],A[end-i]=A[end-i],A[start+i]
            return A
        if k>n:
            k%=n
        invert(nums,0,n-1-k)
        invert(nums,n-k,n-1)
        invert(nums,0,n-1)
        return nums
        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

方法二:先全局,再局部

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        n=len(nums)
        def invert(A,start,end):
            while start<end:
                A[start],A[end]=A[end],A[start]
                start+=1
                end-=1
            return A
            
        if k>n:
            k%=n
        invert(nums,0,n-1)
        invert(nums,0,k-1)
        invert(nums,k,n-1)
        return nums
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/567459
推荐阅读
相关标签
  

闽ICP备14008679号