數字配對 - [Python3]
數字配對 是由 LintCode (詳見 LintCode介紹)
題目描述
給出一個陣列 nums,將陣列中的數兩兩配對,
令陣列 sums 為配對后每組數字的和,要求 sums 的極差最小,
請計算并回傳可能的最小的 sums 的極差,
極差就是陣列中最大最小值的差值,
注意事項
- nums 長度為 n , 2 <= n <= 10^(5) 且 n 為偶數,
- nums 中每一項 k 滿足 0 <= k <= 10^(9)
示例
Input:
[2,3,5,1]
Output:
1
示例說明:
將陣列配對成 (2 + 3 = 5)和 (5 + 1 = 6),它們的差為 1,
代碼實作
實作配對功能的關鍵點就在于盡可能地把所給出的數字配對相加后都取到一個“中間值”,因此對陣列排序是必要的,
class Solution:
def digitalPairing(self, nums):
length = len(nums)
nums.sort()
assert length % 2 == 0
left, right = 0, length - 1
maximum, minimum = -float('inf'), float('inf')
while left <= right:
pair = nums[left] + nums[right]
maximum = max(maximum, pair)
minimum = min(minimum, pair)
left += 1
right -= 1
return maximum - minimum
其中 assert 陳述句是判斷陣列長度為偶數,因為題目里已經有相關保證,所以可以把代碼精簡如下:
class Solution:
"""
@param nums: the integers to be paired.
@return: return the minimum difference of the maximum value and the minimum value after pairing.
"""
def digitalPairing(self, nums):
nums.sort()
left, right = 0, len(nums) - 1
maximum, minimum = -float('inf'), float('inf')
while left <= right:
pair = nums[left] + nums[right]
maximum = max(maximum, pair)
minimum = min(minimum, pair)
left += 1
right -= 1
return maximum - minimum
而且這樣的簡化不會影響運行速度
(畢竟總是呼叫一次len(nums))
卻使資源消耗減少了一丟丟,
感謝瀏覽 點個贊唄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/259735.html
標籤:python
