本文共 1582 字,大约阅读时间需要 5 分钟。
为了找到一个最短的连续子数组,使得对该子数组进行升序排序后,整个数组变为升序排序,我们可以采用以下方法:
sorted,并将其与原始数组nums排序。start为-1。nums,从左到右检查每个元素是否与排序后的数组sorted对应。如果发现不对应的元素,记录当前的索引start并结束遍历。end为-1。nums,检查每个元素是否与排序后的数组sorted对应。如果发现不对应的元素,记录当前的索引end并结束遍历。end - start + 1。import java.util.Arrays;public class Test1_28 { public int findUnsortedSubarray(int[] nums) { int[] sorted = Arrays.copyOf(nums, nums.length); Arrays.sort(sorted); int start = -1, end = -1; for (int i = 0; i < nums.length; i++) { if (sorted[i] != nums[i]) { start = i; break; } } if (start == -1) { return 0; } for (int i = nums.length - 1; i >= 0; i--) { if (sorted[i] != nums[i]) { end = i; break; } } return end - start + 1; } public static void main(String[] args) { int[] nums = {2, 6, 4, 8, 10, 9, 15}; System.out.println(findUnsortedSubarray(nums)); }} Arrays.sort(sorted)将原始数组排序,得到一个有序的数组sorted。start,这标志着子数组的开始。end,这标志着子数组的结束。end - start + 1计算得出。这种方法确保了在O(n log n)时间复杂度内解决问题,其中n是数组的长度,主要来自于排序操作。该算法有效地找到最短的子数组,确保排序该子数组后整个数组变为升序。
转载地址:http://eqdd.baihongyu.com/