🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。
🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。
🎉欢迎 👍点赞?评论?收藏
🔎 算法领域知识 🔎
链接 | 专栏 |
---|---|
分发糖果 | 算法专栏 |
买卖股票的最佳时机 | 算法专栏 |
跳跃游戏 | 算法专栏 |
H 指数 | 算法专栏 |
除自身以外数组的乘积 | 算法专栏 |
加油站 | 算法专栏 |
接雨水 | 算法专栏 |
反转字符串中的单词 | 算法专栏 |
删除有序数组中的重复项 II | 算法专栏 |
轮转数组 | 算法专栏 |
经典算法题 之
轮转数组
题目如下:
给定一个整数数组 nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
示例 1:
输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4]
示例 2:
输入:nums = [-1,-100,3,99], k = 2 输出:[3,99,-1,-100] 解释: 向右轮转 1 步: [99,-1,-100,3] 向右轮转 2 步: [3,99,-1,-100]
提示:
1 <= nums.length <= 10
5-2
31 <= nums[i] <= 2
31 - 1
0 <= k <= 10
5实现逻辑:
k
的值为 0 或者数组为空,则不需要进行任何操作,直接返回原数组。k
取模,因为如果 k
大于数组的长度,重复轮转一次后,再进行轮转结果是一样的。temp
。k
个元素复制到 temp
数组的前 k
个位置。n-k
个元素(n
为数组长度)复制到 temp
数组的后 n-k
个位置。temp
数组的元素复制回原数组中。Java代码实现:
public static void rotate(int[] nums, int k) {
int n = nums.length;
if (k == 0 || n == 0) {
return;
}
k = k % n;
int[] temp = new int[n];
System.arraycopy(nums, n - k, temp, 0, k);
System.arraycopy(nums, 0, temp, k, n - k);
System.arraycopy(temp, 0, nums, 0, n);
}
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5};
int k = 3;
rotate(nums, k);
System.out.println("轮转后的数组为:" + Arrays.toString(nums));
}
执行过程:
在 main 方法中,我们定义了一个示例数组 nums
和一个非负数 k
,然后调用 rotate
方法进行数组轮转操作。最后,在控制台打印出结果。
执行结果:
轮转后的数组为:[3, 4, 5, 1, 2]
这代表经过数组轮转操作之后,数组 {1, 2, 3, 4, 5}
变为 {3, 4, 5, 1, 2}
。
🏆关注作者,普修罗双战士,给你不一样的技术体验,一起在技术领域扶摇直上九万里,共筑坚如磐石的权。
🎉欢迎 👍点赞?评论?收藏