leetcode(46).189. Rotate Array

来源:互联网 发布:一分洗车软件 编辑:程序博客网 时间:2024/05/16 15:23

题意:

将有n个元素的数组,的后k个元素移动到最前面。

初步分析:

循环k次,每次都实现循环移动一位。结果是超时。

参考别人的解决办法:

其实对这个题的理解就是

a b  =>  b a    (a b 都代表一段数组)

如果把整个数组反转:反b反a

再把b反转,把a反转

就能得到:b a

就把问题转化为简单的,反转的实现。

所以,要脱离最基本的想法,要用更宏观的看法来思考。

public 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 s, int e) {    while (s < e) {        int t = nums[s];        nums[s] = nums[e];        nums[e] = t;        s++;        e--;    }}}


0 0
原创粉丝点击