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 }
  • 相关阅读:
    上海汉得面试:
    二叉树的遍历
    操作系统知识总结
    mysql单表查询&&多表查询(职员表14+9)
    数据库查询
    数据库设计三大范式及事务
    某硕笔试题mysql数据库部分(较为全面)
    java 读取excel 将数据插入到数据库
    java 读取excel 正常 xls
    java 读取excel(Map结构)xls
  • 原文地址:https://www.cnblogs.com/lz87/p/7337204.html
Copyright © 2011-2022 走看看