Lintcode 39. 恢复旋转排序数组
题目描述:给定一个旋转排序数组,在原地恢复其排序。(升序)
这道题理解的不是很透,之后需要再深入实现一下。
class Solution {
public:
/**
* @param nums: An integer array
* @return: nothing
*/
void recoverRotatedSortedArray(vector<int> &nums) {
int offset = 0;
for (int i = 1; i < nums.size(); ++i) {
//寻找偏移量
if (nums[i-1] > nums[i]) {
offset = i;
}
}
if (0 == offset) {
return;
}
offset = nums.size() - offset;
int gcd = getGCD(offset, nums.size());
for (int i = 0; i < gcd; ++i) {
int next = (i + offset) % nums.size();
//将每个数放到它们应该放的位置
while (next != i) {
int tmp = nums[i];
nums[i] = nums[next];
nums[next] = tmp;
next = (next + offset) % nums.size();
}
}
}
//辗转相除法求最大公约数
int getGCD(int a, int b) {
if (0 == a % b) {
return b;
}
return getGCD(b, a % b);
}
};