您的位置:首页 > 其它

恢复旋转排序数组

2018-01-15 21:27 281 查看

思路

这道题应该首先计算出来 每个数字到其 原位置 移动的距离。但是有一个陷阱是,当使用程序移动的 时候,有时间遇见 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;
}
}
}

}


参考

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 lintcode