zoukankan      html  css  js  c++  java
  • [GeeksForGeeks] Minimum length unsorted subarray, sorting which makes the array sorted

    Given an array, find the minimum length unsorted subarray. After soring this unsorted subarray,

    the whole array is sorted.

    Example, if the input array is [10, 12, 20, 30, 25, 40, 32, 31, 45, 50, 60], your program should be 

    able to find that the minimum length unsorted subarray lies between the indices 3 and 7.

    Solution 1. O(n * logn) runtime, O(n) space

    1. make a copy of the given array.

    2. sort the copy.

    3. find the first and last indices where the given array and its sorted copy don't match .

    Solution 2. O(n) runtime, O(1) space

    The core idea of this solution is to first find the start index i of the unsorted subarray where arr[i] < arr[i- 1], 

    and use arr[i - 1] as the current max value. 

    Then keep scaning the rest of the array, as long as arr[i] < arr[i - 1] or arr[i] is smaller than the max value, 

    we know that arr[i] is not in its sorted place. Update end index to i.

    If arr[i] is bigger than max, update the current max to arr[i].

     1 public int[] getMinLenUnsortedSubarray(int[] arr) {
     2     int[] r = {-1, -1};
     3     if(arr == null || arr.length <= 1) {
     4         return r;
     5     }
     6     int i = 1;
     7     for(; i < arr.length; i++){
     8         if(arr[i] < arr[i - 1]) {
     9             break;
    10         }
    11     }
    12     if(i == arr.length - 1){
    13         return r;            
    14     }
    15     r[0] = i - 1;
    16     r[1] = i;
    17     int max = arr[i - 1];
    18     for(i++; i < arr.length; i++){
    19         if(arr[i] < arr[i - 1] || arr[i] < max){
    20             r[1] = i;
    21         }
    22         else if(arr[i] >= max){
    23             max = arr[i];
    24         }
    25     }
    26     return r;
    27 }
  • 相关阅读:
    java 中的Debug eclipse 开发工具使用
    google 浏览器的Debug 调试工具使用
    java 实现word 转 pdf
    你好啊 未来的自己
    java 实现在线阅读 .pdf
    java 的在线下载文件 .pdf
    Java 实现手机发送短信验证码
    Java 实现发送邮件
    Java 实现邮件的发送
    沃尔沃投资两家以色列科技创企 布局人工智能
  • 原文地址:https://www.cnblogs.com/lz87/p/7337204.html
Copyright © 2011-2022 走看看