lintcode-easy-Recover Rotated Sorted Array
Posted 哥布林工程师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lintcode-easy-Recover Rotated Sorted Array相关的知识,希望对你有一定的参考价值。
Given a rotated sorted array, recover it to sorted array in-place.
[4, 5, 1, 2, 3]
-> [1, 2, 3, 4, 5]
方法挺诡异的,记住就好:
找到分界点,把左半边反转,把右半边反转,这时候整个数组就是从大到小排列的了,再把整个数组反转就可以了。
但是要注意这个数组是不是没有rotate过,因此开始先判断一下。
public class Solution { /** * @param nums: The rotated sorted array * @return: void */ public void recoverRotatedSortedArray(ArrayList<Integer> nums) { // write your code if(nums == null || nums.size() <= 1) return; if(nums.get(0) < nums.get(nums.size() - 1)) return; int flag = 0; for(int i = 0; i < nums.size() - 2; i++){ if(nums.get(i) > nums.get(i + 1)){ flag = i; break; } } reverse(nums, 0, flag); reverse(nums, flag + 1, nums.size() - 1); reverse(nums, 0, nums.size() - 1); return; } public void reverse(ArrayList<Integer> nums, int start, int end){ if(start > end) return; int left = start; int right = end; while(left < right){ int temp = nums.get(left); nums.set(left, nums.get(right)); nums.set(right, temp); left++; right--; } return; } }
以上是关于lintcode-easy-Recover Rotated Sorted Array的主要内容,如果未能解决你的问题,请参考以下文章