leetcode 旋转数组 java
本来想用栈或者队列来解决,发现一直报k>nums.length的错。
将原数组下标为 i 的元素放至新数组下标为 (i+k)modn 的位置,最后将新数组拷贝至原数组即可。
class Solution {public void rotate(int[] nums, int k) {// Stack<Integer> stack = new Stack<>();// for(int num: nums){// stack.push(num); // 1 2 // }// int[] res = new int[nums.length];// if(k<=nums.length){// for(int i = k-1; i>=0;i--){ // 7 6 5// res[i] = stack.pop();// }// for(int i = k; i<nums.length;i++){// res[i]=nums[i-k];// }// for(int i = 0; i<nums.length;i++){// nums[i]=res[i];// }// }else{// for(int i = 0 ; i<nums.length;i++){// nums[i]=stack.pop();// }// }int n = nums.length;int[] newArr = new int[n];for (int i = 0; i < n; ++i) {newArr[(i + k) % n] = nums[i];}System.arraycopy(newArr, 0, nums, 0, n);}
}