continuous subarray

shortest

Example 1:

Input: [2, 6, 4, 8, 10, 9, 15]
Output: 5
Explanation: You need to sort [6, 4, 8, 10, 9] in ascending order to make the whole array sorted in ascending order.

Note:

  1. Then length of the input array is in range [1, 10,000].
  2. The input array may contain duplicates, so ascending order here means <=.


思路:copy一份原数组,对copy的数组排序, 再比较原数组和copy数组对应位置上的元素是否相等。

Solution:

package com.billkang;

import java.util.Arrays;

/**
 * @author binkang
 * @date May 20, 2017
 */
public class ShortestUnsortedContinuousSubarray {
	public int findUnsortedSubarray(int[] nums) {
		int n = nums.length;
		int[] temp = Arrays.copyOf(nums, n);
		Arrays.sort(temp);

		int start = 0;
		while (start < n && nums[start] == temp[start]) start++;

		int end = n - 1;
		while (end > start && nums[end] == temp[end]) end--;

		return end - start + 1;
	}
}