天天看點

LeetCode 訓練場:164. 最大間距

題目

  • 164. 最大間距
  • 難度:困難

題目描述

給定一個無序的數組,找出數組在排序之後,相鄰元素之間最大的內插補點。

如果數組元素個數小于 2,則傳回 0。

示例 1:

輸入: [3,6,9,1]

輸出: 3

解釋: 排序後的數組是 [1,3,6,9], 其中相鄰元素 (3,6) 和 (6,9) 之間都存在最大內插補點 3。

示例 2:

輸入: [10]

輸出: 0

解釋: 數組元素個數小于 2,是以傳回 0。

說明:

  • 你可以假設數組中所有元素都是非負整數,且數值在 32 位有符号整數範圍内。
  • 請嘗試線上性時間複雜度和空間複雜度的條件下解決此問題。

題解

分析

要解決該題目,我們通過觀察示例,優先考慮其邊界情況,即當數組長度為 1 或為空時,此時最大間距應該為 0;

其次,由于一開始給定的數組是無序的,而最終需要在排序後的數組找出結果,是以我們先對數組進行排序操作,調用

sort()

方法即可,其内部是一個歸并排序,是以時間複雜度是

O(nlogn)

排序後,我們通過周遊數組,分别計算相鄰元素之間的內插補點,然後進行比較之後取出間距最大值傳回即可,此時主要進行周遊操作,時間複雜度為

O(n)

是以最終時間複雜度為

O(nlogn)

代碼

public int maximumGap(int[] nums) {
    if(nums.length <= 1){
        return 0;
    }

    Arrays.sort(nums);
    int res = 0;
    for(int i = 0; i < nums.length - 1; i++){
        int tmp = nums[i + 1] - nums[i];
        if(tmp > res){
            res = tmp;
        }
    }

    return res;
}           

複制