题目要求:
给定一个旋转排序数组,在原地恢复其排序。
说明
什么是旋转数组?
- 比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]
样例
[4, 5, 1, 2, 3]
-> [1, 2, 3, 4, 5]
挑战
使用O(1)的额外空间和O(n)时间复杂度
思路:
因为这个是用了vector动态数组,所以我的思路很简洁,首先找到最小的数字,因为是顺序排序只不过旋转了,所以只用判断后一个是不是比前一个小就行了。找到了以后从前往后循环,直到那个最小的数字之前。每一次循环都把第一位的数字插到最后一位,然后删除第一位数字。
源码:
class Solution {
public:
/*
* @param nums: An integer array
* @return: nothing
*/
void recoverRotatedSortedArray(vector<int> &nums) {
// write your code here
if(nums.empty()) return;
for(int i = 0; i < nums.size() - 1; i++){
if(nums[i] > nums[i+1]){ //找到起始数字
for(int j = 0; j <= i; j++){
nums.push_back(nums[0]);
nums.erase(nums.begin());
}
break;
}
}
}
};