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

    你可能感兴趣的文章
    MySQL主从复制几个重要的启动选项
    查看>>
    MySQL主从复制及排错
    查看>>
    mysql主从复制及故障修复
    查看>>
    MySQL主从复制的原理和实践操作
    查看>>
    webpack loader配置全流程详解
    查看>>
    mysql主从复制,读写分离,半同步复制实现
    查看>>
    MySQL主从失败 错误Got fatal error 1236解决方法
    查看>>
    MySQL主从架构与读写分离实战
    查看>>
    MySQL主从篇:死磕主从复制中数据同步原理与优化
    查看>>
    mysql主从配置
    查看>>
    MySQL之2003-Can‘t connect to MySQL server on ‘localhost‘(10038)的解决办法
    查看>>
    MySQL之CRUD
    查看>>
    MySQL之DML
    查看>>
    Mysql之IN 和 Exists 用法
    查看>>
    MYSQL之REPLACE INTO和INSERT … ON DUPLICATE KEY UPDATE用法
    查看>>
    MySQL之SQL语句优化步骤
    查看>>
    MYSQL之union和order by分析([Err] 1221 - Incorrect usage of UNION and ORDER BY)
    查看>>
    Mysql之主从复制
    查看>>