经典的三部反转法。
Time complexity O(n).
Space complexity O(1).
一个小优化是在找pivot的时候可以用binary search (见LintCode 62)。但总的时间复杂度还是O(n)。
class Solution {
public:
/**
* @param nums: An integer array
* @return: nothing
*/
void recoverRotatedSortedArray(vector<int> &nums) {
int pos = 0;
int arrayLen = nums.size();
for (int i = 1; i < arrayLen; ++i) {
if (nums[i] < nums[i - 1]) {
pos = i;
break;
}
}
if (pos == 0) return;
reverse(nums, 0, pos - 1);
reverse(nums, pos, arrayLen - 1);
reverse(nums, 0, arrayLen - 1);
}
private:
void reverse(vector<int> &nums, int start, int end) {
while (start < end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}
};