15.轮转数组
大约 1 分钟
15.轮转数组
参考链接
189. 轮转数组 - 力扣(LeetCode)- 官方题解
个人尝试
class Solution {
public void rotate(int[] nums, int k) {
if (nums.length == 1) return;
// k > nums.length 怎么办?
if (k > nums.length) k = k % nums.length;
if (k == nums.length) return;
// nums = [1,2,3,4,5,6,7], k = 3
// 整个数组左右交换位置 nums = [7, 6, 5, 4, 3, 2, 1]
for (int i = 0, j = nums.length - 1; i < j; i++, j--) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
// 前 k 个数,左右交换位置 nums = [5, 6, 7, 4, 3, 2, 1]
for (int i = 0, j = k - 1; i < j; i++, j--) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
// 剩余的数,左右交换位置 nums = [5, 6, 7, 1, 2, 3, 4]
for (int i = k, j = nums.length - 1; i < j; i++, j--) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
return;
}
}
优秀题解
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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。