/** * 旋转数组:将数组的后 k 位数移至头部,前 length - k 位数移至尾部 * 要求使用原地算法,即不使用额外的空间 * @param nums 数组 * @param k 旋转的个数 */ private static void rotate(int[] nums, int k) { int length = nums.length; // 无须操作 if (k == 0 || k == length || length == 1) { return; } // 修正 k if (k > length) { k %= length; } // 从 length - 1 开始操作 int indexLimit = length - 1; int curIndex = indexLimit; int lastIndex = indexLimit; int lastValue = nums[indexLimit]; int count = 0; while (count++ < length) { curIndex += k; // 修正 curIndex if (curIndex > indexLimit) { curIndex -= length; } int tmp = nums[curIndex]; nums[curIndex] = lastValue; lastValue = tmp; if (curIndex == lastIndex) { // 一次完整的迭代交换后 // 需要重置索引和 lastValue curIndex = --lastIndex; lastValue = nums[curIndex]; } } } 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 菜鸡的算法修炼:数组(旋转数组的最小数字)
- LeetCode每日一题: 旋转数组(No.189)
- C++ 和 Python 实现旋转数组的最小数字
- LeetCode - 189 - 旋转数组(rotate-array)
- C语言数组中字符串的旋转(左旋与右旋)
- 【Leetcode】61.旋转链表
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。