旋转数组

来源:互联网 发布:初中生 18cm 知乎 编辑:程序博客网 时间:2024/04/30 10:57

   

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].

大致的意思是数组向右旋转K次

   

解法1: 内存占用少, 但是时间上效率低点,

public class Solution {    public void rotate(int[] nums, int k) {        int n = nums.length;        k = k % n;        if(n == 1 || k <= 0)        return;        if(k == n) {            reverse(nums, 0, n-1);         } else {            reverse(nums, 0, n-k-1);             reverse(nums, n-k, n-1);            reverse(nums, 0, n-1);        }    }        private void reverse(int[] nums, int start, int end) {        for(int i = start , j = end; i != j;) {            int tmp = nums[i];            nums[i] = nums[j];            nums[j] = tmp;            if(i+1 == j) {                break;            }            i++;            j--;        }    }}
解法2:内存空间占用会大点,但是时间上效率高点

public class Solution {    public void rotate(int[] nums, int k) {        int n = nums.length;        k = k % n;        if(n == 1 || k <= 0)        return;        int[] tmp = new int[n];        System.arraycopy(nums, n-k,tmp,0,k);        System.arraycopy(nums, 0,tmp,k,n-k);        System.arraycopy(tmp, 0,nums,0,n);    }}


0 0
原创粉丝点击