189. Rotate Array
原题链接:https://leetcode.com/problems/rotate-array/description/
这道题目不错,而且题意里面已经指明有多种方法了,确实可以锻炼人的思维:
import java.util.Arrays;
/**
* Created by clearbug on 2018/2/26.
*/
public class Solution {
public static void main(String[] args) {
Solution s = new Solution();
int[] nums = new int[]{1, 2, 3, 4, 5, 6, 7};
s.rotate(nums, 3);
System.out.println(Arrays.toString(nums));
}
/**
* 方法二:在方法一的基础上优化了一点
*
* 提交结果:Runtime: 1 ms,beats 98.28%
*
* 时间复杂度:O(k + n)
* 空间复杂度:O(k)
*
* @param nums
* @param k
*/
public void rotate(int[] nums, int k) {
if (nums.length < 2) {
return;
}
k = k % nums.length;
int[] temp = new int[k];
for (int i = 0; i < k; i++) {
temp[i] = nums[nums.length - (k - i)];
}
for (int i = nums.length - 1; i >= k; i--) {
nums[i] = nums[i - k];
}
for (int i = 0; i < k; i++) {
nums[i] = temp[i];
}
}
/**
* 方法一:最简单,最直接,最暴力的方法
*
* 提交结果:Runtime: 149 ms,beats 2.27%
*
* 时间复杂度:O(k*n)
* 空间复杂度:O(1)
*
* @param nums
* @param k
*/
public void rotate1(int[] nums, int k) {
for (int i = 0; i < k; i++) {
rotate1Helper(nums);
}
}
private void rotate1Helper(int[] nums) {
int temp = nums[nums.length - 1];
for (int i = nums.length - 1; i > 0; i--) {
nums[i] = nums[i - 1];
}
nums[0] = temp;
}
// 官方答案1:就是我的方法一的思路啦
// 官方答案2:类似我的方法二,但是效率上目测还不如我的方法二
// 官方答案3:我的大脑中曾经闪现过这种思路,但是由于实现起来比前两种方法稍微复杂点就放弃了
// 官方答案4:利用反转操作,这种方法确实很好很强大啊
}