LintCode 1334

旋转数组

题目描述
给定一个数组,将数组向右移动k步,其中k为非负数。

扫码免费做题
↓↓↓

样例 1
输入: [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
输入: [-1,-100,3,99], k = 2输出: [3,99,-1,-100]解释: 向右旋转1步: [99,-1,-100,3]向右旋转2步: [3,99,-1,-100]
解题思路
Example:nums = 1,2,3,4,5,6,7 k = 3 Step1:划分成1,2,3,4, 5,6,7 Step2:分别reverse,4,3,2,1, 7,6,5 Step3:合并reverse,5,6,7,1,2,3,4
源代码
publicclassSolution{/** * @param nums: an array * @param k: an integer * @return: rotate the array to the right by k steps */publicint[] rotate(int[] nums, int k) {// Write your code hereint n = nums.length; k %= n; reverse(nums, 0, n - k - 1); reverse(nums, n - k, nums.length - 1); reverse(nums, 0, nums.length - 1);return nums; }publicvoidreverse(int[] n, int i, int j){for (int p = i, q = j; p < q; p++, q--) {int temp = n[p]; n[p] = n[q]; n[q] = temp; } }}
查看完整代码,向左滑动
点击【阅读原文】,查看领扣原题
继续阅读
阅读原文