思路
这道题应该首先计算出来 每个数字到其 原位置 移动的距离。但是有一个陷阱是,当使用程序移动的 时候,有时间遇见 1, 3, 5 只是在几个数之间交换的情形(死循环),所以要保证程序能够跳的出来。
代码
public void recoverRotatedSortedArray(List<Integer> nums) {
int temp = nums.get(0);
boolean[] status = new boolean[nums.size()];
Arrays.fill(status, false);
int temp2;
int pos = 0;
int pointer = 0;
int count = 0;
int pointerNew;
for (int i = 0; i < nums.size(); i++) {
if (temp > nums.get(i)) {
temp = nums.get(i);
pos = i;
}
}
if (pos == 0) {
return;
}
for (int i = 0; i < nums.size() && status[i] == false; i++) {
temp = nums.get(i);
pointer = i;
while (true) {
pointerNew = pointer - pos;
if (pointerNew < 0) {
pointerNew += nums.size();
}
if (status[pointerNew] == false) {
temp2 = nums.get(pointerNew);
nums.set(pointerNew, temp);
status[pointerNew] = true;
temp = temp2;
pointer = pointerNew;
}else {
break;
}
}
}
}