每日一题-数组 *leetcode189

94 阅读1分钟

一、题目描述

二、数学知识

给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数,等价于将数组n个元素反转,将前k个元素反转,再将后n-k个元素反转,同时,注意此处,k=k%n(对于n为1的情况)

三、优解代码

class Solution {
    public void rotate(int[] nums, int k) {
        k = k % nums.length;
        reverse(nums,0,nums.length-1);
        reverse(nums,0,k-1);
        reverse(nums,k,nums.length-1);
    }
    public void reverse(int[] nums,int start,int end){
        while(start < end){
            int temp = nums[start];
            nums[start]=nums[end];
            nums[end] = temp;
            start++;
            end--;
        }
    }
}