本文共 2372 字,大约阅读时间需要 7 分钟。
To solve this problem, we need to find the shortest continuous subarray such that sorting this subarray in ascending order would make the entire array sorted in ascending order as well.
The approach to solve this problem involves the following steps:
Sort the Array: First, we create a sorted version of the input array. This helps us identify the segments of the array that are out of order.
Identify Differences: We compare the original array with the sorted array to find the indices where they first differ (start of the unsorted segment) and where they last differ (end of the unsorted segment).
Determine the Subarray Length: The length of the shortest subarray that needs to be sorted is given by the range from the first differing index to the last differing index, inclusive.
public class Solution { public int findMinimumSubarrayLength(int[] nums) { int n = nums.length; int[] sorted = Arrays.copyOf(nums, n); Arrays.sort(sorted); int start = 0; while (start < n && sorted[start] == nums[start]) { start++; } if (start >= n) { return 0; } int end = n - 1; while (end >= 0 && sorted[end] == nums[end]) { end--; } return end - start + 1; }}
Sorting the Array: We create a sorted version of the input array to compare against the original array and identify the unsorted segments.
Finding the Start of the Subarray: By iterating through the original array, we find the first index where the value does not match the corresponding value in the sorted array. This index marks the beginning of the segment that needs to be sorted.
Finding the End of the Subarray: Similarly, by iterating from the end of the array, we find the last index where the value does not match the corresponding value in the sorted array. This index marks the end of the segment that needs to be sorted.
Calculating the Length: The length of the subarray is calculated as the difference between the end and start indices, plus one.
This approach ensures that we efficiently find the shortest subarray that, when sorted, will result in the entire array being sorted. The time complexity is dominated by the sorting step, making it (O(n \log n)), which is efficient for large arrays up to 10,000 elements.
转载地址:http://ekjez.baihongyu.com/