LeetCode 189.旋转数组
问题:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数
解法一:也就是我拿到题想到的解法,旋转k次,每次旋转1个元素
public class Soultion{
public void rotate(int[] nums,int k){
int temp,tail;
for(int i = 0;i < k;i++){
tail = nums[nums.length-1];
for(int j = nums.length-1;j > 0;j--){
nums[j] = nums[j-1];
}
nums[nums.length-1] = tail;
}
}
}
解法二:利用反转,第一步将整个数组进行反转;第二步将前k个元素进行反转;第三步将余下的元素进行反转。
class Solution {
public void rotate(int[] nums, int 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 begin,int end){
while(begin<end){
int temp = nums[end];
nums[end] = nums[begin];
nums[begin] = temp;
begin++;
end--;
}
}
}
还没有评论,来说两句吧...