leetcode- Rotate Array

题目:

Rotate an array of n elements to the right by k steps.

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.

包含的元素:1、一个数组 2、一个k(从数组右端向左端计)

思路:1、自己的,借助另外一个数组,把该数组变化的结果存到另外一个数组中;

2、Simple and Most elegant logic !

Let the array be - 123456789 and k = 4

Step 1 - 12345 6789 ---> 54321 6789

Step 2 - 54321 6789 ---> 54321 9876

Step 3 - 543219876 ---> 678912345

代码如下:

package leetcode;

public class RotateArray {
//审题不仔细: k是从右边开始的
     public void rotate(int[] nums, int k) {
           /*int n = nums.length;    //自己的space:O(n)
           if(n==1 || k>=n) return ;
           int[] replace = new int[n];
           for(int i=0;i < n-1-k;n++){
               replace[i] = nums[k+i];
           }
           for(int i=k;i>=0;i--){             //这里,后面的可以递增,前面的可以通过递减来赋值;(都是从指定的那个点开始的嘛)
               replace[n-1-i] = nums[i];
           }
           for(int i = 0;i<n;i++){
               nums[i] = replace[i];
           }*/

 


         int n = nums.length;            //方法2!!
          k =((n==0)? 0:k%n);   //三目运算符!!!  设置下标的通用方法!!
          reverse(nums,0,n-k);
          reverse(nums,k,n);
          reverse(nums,0,n);
        
        
        
        }
    private void reverse(int[] nums, int i, int j) {
        // TODO Auto-generated method stub
        while(i<j){
            int tmp = nums[i];
            nums[i++] = nums[--j];     //自增!
                                       //数组的时候,,这里要注意一点,减法是从哪里开始的?
            nums[j] = tmp;
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}
总结:1、审题不仔细 2、自己的方法AC超时

 

posted @ 2016-04-12 19:19  wangb021  阅读(157)  评论(0编辑  收藏  举报