1200 最小絕對差(排序)

2021-10-08 08:33:32 字數 1355 閱讀 8176

1. 問題描述:

給你個整數陣列 arr,其中每個元素都不相同。

請你找到所有具有最小絕對差的元素對,並且按公升序的順序返回。

示例 1:

輸入:arr = [4,2,1,3]

輸出:[[1,2],[2,3],[3,4]]

示例 2:

輸入:arr = [1,3,6,10,15]

輸出:[[1,3]]

示例 3:

輸入:arr = [3,8,-10,23,19,-4,-14,27]

輸出:[[-14,-10],[19,23],[23,27]]

2. 思路分析:

因為是需要求解出絕對值最小的元素對,並且我們知道絕對值比較小的應該對列表進行排序之後相鄰兩個元素的絕對值較小的元素對,所以我們需要對列表進行排序,並且將列表中的第乙個元素與第二個元素組成的列表新增到結果集中,然後比較下一對相鄰的元素與結果集中最後面的元素對的絕對值進行比較,如果後者小於前者說明後面兩個相鄰的元素對的絕對值更小,所以應該彈出結果集中絕對值較大的元素,因為可能存在絕對值相等的元素對,所以這個時候需要使用乙個變數進行計數,用來累加當前絕對值相等的元素對,當發現更小的那麼我們只需要彈出絕對值更大的乙個元素對或者是若干個絕對值相等的元素對即可,整體的思路還是比較容易理解的

3. **如下:

import collections

from typing import list

class solution:

def minimumabsdifference(self, arr: list[int]) -> list[list[int]]:

# 先排序

arr.sort()

res = list()

# 用來累加絕對值相等的元素對

count = 1

for i in range(1, len(arr) - 1):

suff = abs(arr[i + 1] - arr[i])

pre = abs(res[len(res) - 1][0] - res[len(res) - 1][1])

if suff < pre:

while len(res) > 0 and count > 0:

res.pop()

count -= 1

# 最後別忘了新增當前最小的那個

count += 1

elif suff == pre:

count += 1

return res

1200 最小絕對差

給你個整數陣列 arr,其中每個元素都 不相同。請你找到所有具有最小絕對差的元素對,並且按公升序的順序返回。示例 1 輸入 arr 4,2,1,3 輸出 1,2 2,3 3,4 示例 2 輸入 arr 1,3,6,10,15 輸出 1,3 示例 3 輸入 arr 3,8,10,23,19,4,14,...

1200 最小絕對差

題目描述 給你個整數陣列 arr,其中每個元素都 不相同。請你找到所有具有最小絕對差的元素對,並且按公升序的順序返回。示例 1 輸入 arr 4,2,1,3 輸出 1,2 2,3 3,4 示例 2 輸入 arr 1,3,6,10,15 輸出 1,3 示例 3 輸入 arr 3,8,10,23,19,...

1200 最小絕對差

1200.最小絕對差 1.考慮先排序 2.求相鄰元素差,與原列表元素產生對應關係 3.由題意找到所有解 class solution def minimumabsdifference self,arr list int list list int arr.sort subtract list arr...