一、题目描述
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例 1:
1 | 输入: [1,2,3,4,5,6,7] 和 k = 3 |
示例 2:
1 | 输入: [-1,-100,3,99] 和 k = 2 |
说明:
- 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
- 要求使用空间复杂度为 O(1) 的 原地 算法。
二、题解
1.算法描述
- 暴力法:两个for循环嵌套,每次将数组中的元素向后移动一位
- 三次翻转数组
2.个人分析
- 暴力法挺好理解就是超时
- 三次翻转:
- 第一次:将整个数组翻转
- 第二次:将[0,k-1]的数组翻转
- 第三次:将[k,n-1]的数组翻转
3.代码
1 | void reverse(int *nums, int low, int high) |
三、PS:
暴力法的超时代码
1 | //超时了 |