LeetCode - 189. Rotate Array

来源:互联网 发布:ubuntu 打开端口 编辑:程序博客网 时间:2024/05/18 01:43

题目中要求翻转一个数组,注意题目给出的k可能大于数组的长度,所以首先要进行一个预处理,就是k = k % nums.length。解决了这个问题之后,我们可以来考虑翻转的问题,仔细观察后发现,可以用三次翻转数组来解决问题:首先将整个数组反转,接着翻转前k个元素,最后翻转k到第nums.length个元素,这样就可以实现题目中要求的翻转。

注意这种方法不仅仅适用于数组,还可以用同样的思路翻转链表,但是reverse函数要重新写,整个代码如下:

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

知识点:

1. 当题目中要求移动/翻转数组/链表k个位置的时候,要多多考虑k大于数组/链表长度的情况,这时候使用k % length即可

0 0
原创粉丝点击