恢复旋转排序数组
题目
给定一个旋转排序数组,在原地恢复其排序。
样例
给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null
说明
什么是旋转数组?
比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]
挑战
使用O(1)的额外空间和O(n)时间复杂度
题解
找到旋转节点后分布进行逆序操作。
public class Solution {
/**
* @param nums: The rotated sorted array
* @return: void
*/
public void recoverRotatedSortedArray(ArrayList<Integer> nums) {
for (int i=0;i<nums.size()-1;i++)
{
if (nums.get(i) > nums.get(i+1))
{
reverse(nums,0,i);
reverse(nums,i+1,nums.size()-1);
reverse(nums,0,nums.size()-1);
return;
}
}
}
private void reverse(ArrayList<Integer> nums,int start,int end)
{
for (int i=start,j=end;i<j;i++,j--)
{
int temp = nums.get(i);
nums.set(i, nums.get(j));
nums.set(j, temp);
}
}
}
Last Update 2016.8.26