博客
关于我
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/

    你可能感兴趣的文章
    PHPExcel一些基本设置总结
    查看>>
    PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/c...
    查看>>
    PHPMailer发送邮件
    查看>>
    phpmailer发送邮件,可以带附件
    查看>>
    phpmyadmin 安装
    查看>>
    phpmyadmin数据库建表及插入
    查看>>
    phprpc简单使用
    查看>>
    phpstorm中Xdebug的使用
    查看>>
    phpstorm中使用svn版本控制器
    查看>>
    phpstorm配置php脚本执行
    查看>>
    phpStudy安装教程
    查看>>
    phpunit
    查看>>
    phpWhois 项目推荐
    查看>>
    phpwind部署问题
    查看>>
    PHP__call __callStatic
    查看>>
    php一句话图片运行,【后端开发】php一句话图片木马怎么解析
    查看>>
    php上传文件找不到临时文件夹
    查看>>
    PHP下curl用法分析
    查看>>
    php与web服务器关系
    查看>>
    redis事务操作
    查看>>