1. 程式人生 > >LeetCode:164、最大間距

LeetCode:164、最大間距

題目描述:

給定一個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。

如果陣列元素個數小於 2,則返回 0。

示例:

  • 示例1:
輸入: [3,6,9,1]
輸出: 3
解釋: 排序後的陣列是 [1,3,6,9], 其中相鄰元素 (3,6) 和 (6,9) 之間都存在最大差值 3。
  • 示例2:
輸入: [10]
輸出: 0
解釋: 陣列元素個數小於 2,因此返回 0。

解題思路:

先將特殊的數值進行排除,如陣列大小小於2、陣列為空、陣列中僅僅只有兩個數的情況,再將無序的陣列進行排序後遍歷查詢比較出絕對值差最大的值。

AC程式碼:

int maximumGap(int* nums, int numsSize) {
    if(numsSize < 2 || nums == NULL)
    {
        return 0;
    }
    if(numsSize == 2)
    {
        return abs(nums[0] - nums[1]);
    }
    for(int i = 0; i < numsSize; i++)
    {
        for(int j= 0; j < numsSize - 1 - i; j++)
        {
            if(nums[j] > nums[j + 1])
            {
                int temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
    int result = 0;
    for(int k = 1; k < numsSize; k++)
    {
        if(result < abs(nums[k]-nums[k-1]))
        {
            result = abs(nums[k]-nums[k-1]);
        }
    }
    return result;
}