Interview Question - minimum length to sort array

這是網上看到的一道面經題目,覺得很有意思。總結下。

題目:
給你一個未排序的數組,問最短從這個數組的那一段開始排序即能讓整個數組有序
比如(1,2,5,7,6,4,9),那么從 (5,7,6,4)這一段排序就足夠了
最壞情況O(N^2),最優情況O(N)時間O(1)空間

My code:

public int getMinLength(int[] nums) {
    if (nums == null || nums.length == 0) {
        return 0;
    }
    
    int min = Integer.MAX_VALUE;
    int max = Integer.MIN_VALUE;
    
    for (int i = 1; i < nums.length; i++) {
        if (nums[i] > nums[i - 1]) {
            continue;
        }
        else {
            min = Math.min(min, nums[i]);
            max = Math.max(max, nums[i - 1]);
        }
    }
    
    if (max == Integer.MIN_VALUE) {
        return 0;
    }
    
    int begin = 0;
    int end = nums.length - 1;
    while (nums[begin] < min) {
        begin++;
    }
    
    while (nums[end] > max) {
        end--;
    }
    
    System.out.println("We should sort: [" + begin + ", " + end + "]");
    return end - begin + 1;
}

自己參考了答案才寫出來。

reference:
http://stackoverflow.com/questions/15855594/min-n-m-so-that-whole-array-will-be-sorted/15855670#15855670

Anyway, Good luck, Richardo! -- 09/13/2016

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容