java
189. 轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
这题做出来了,思路和官方思路3一样,但是用了集合自带的翻转方法,在数组和List转换看起来没那么简洁
向右循环移动k个位置相当于执行以下三个步骤
1.整体翻转
2.前k个数翻转
3.后n-k个数翻转
我的代码
注意list自带的reverse不能指定下标,所以又定义了两个list,使用subList可以直接复制且指定下标,左闭区间右开区间的原则。[0,k),[k,list.size())
java
class Solution {
public void rotate(int[] nums, int k) {
k = k % nums.length;
List<Integer> list = new ArrayList<Integer>();
for (int num : nums) {
list.add(num);
}
Collections.reverse(list);
List<Integer> list1 = new ArrayList<>(list.subList(0, k));
Collections.reverse(list1);
List<Integer> list2 = new ArrayList<>(list.subList(k, list.size()));
Collections.reverse(list2);
list1.addAll(list2);
for (int i = 0; i < list1.size(); i++) {
nums[i] = list1.get(i);
}
}
}
官方解法三
java
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 start, int end) {
while (start < end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start += 1;
end -= 1;
}
}
}
作者:力扣官方题解
链接:https://leetcode.cn/problems/rotate-array/solutions/551039/xuan-zhuan-shu-zu-by-leetcode-solution-nipk/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。