博客
关于我
LeetCode.581 Shortest Unsorted Continuous Subarray
阅读量:806 次
发布时间:2019-03-17

本文共 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.

Approach

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.

  • Solution Code

    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;    }}

    Explanation

  • 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/

    你可能感兴趣的文章
    python 中 dict 的另一种用法
    查看>>
    Python 中 PIL 读取图片出现异常旋转的解决方法
    查看>>
    Python 中只有一个 True 和一个 False 对象吗?
    查看>>
    python读取mtcars数据集并实现以下操作_关于数据处理。。,Python交流,技术交流区,鱼C论坛 - Powered by Discuz!...
    查看>>
    Python 中多线程与多处理之间的区别
    查看>>
    Python 中如何使用 lambda 函数
    查看>>
    Python 中如何创建多行字符串?
    查看>>
    Python 中如何处理异常?
    查看>>
    Python 中如何实现列表的切片?
    查看>>
    Python 中如何实现字典的排序?
    查看>>
    Python 中常用的数据类型及相关操作详解
    查看>>
    Python 中的离线语音转文本
    查看>>
    Python 中的线程
    查看>>
    Python 中的继承机制是什么样的?
    查看>>
    Python 中的装饰器是什么?
    查看>>
    Python 中的装饰器是如何工作的,有哪些实际应用场景?
    查看>>
    python读excel
    查看>>
    Python 中读取 CSV 文件-ChatGPT4o作答
    查看>>
    python请求html_使用Python请求获取HTML?
    查看>>
    Python 之匿名函数和偏函数
    查看>>