Skip to content

Latest commit

 

History

History

1200.Minimum Absolute Difference

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

English Version

题目描述

给你个整数数组 arr,其中每个元素都 不相同

请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。

每对元素对 [a,b] 如下:

  • a , b 均为数组 arr 中的元素
  • a < b
  • b - a 等于 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 <= arr.length <= 10^5
  • -10^6 <= arr[i] <= 10^6

解法

方法一:排序

时间复杂度 $O(nlogn)$,其中 $n$ 表示 $arr$ 的长度。

Python3

class Solution:
    def minimumAbsDifference(self, arr: List[int]) -> List[List[int]]:
        arr.sort()
        ans = []
        mi = inf
        for a, b in pairwise(arr):
            d = b - a
            if d < mi:
                ans = [(a, b)]
                mi = d
            elif d == mi:
                ans.append((a, b))
        return ans

Java

class Solution {
    public List<List<Integer>> minimumAbsDifference(int[] arr) {
        Arrays.sort(arr);
        List<List<Integer>> ans = new ArrayList<>();
        int n = arr.length;
        int mi = Integer.MAX_VALUE;
        for (int i = 0; i < n - 1; ++i) {
            int a = arr[i], b = arr[i + 1];
            int d = b - a;
            if (d < mi) {
                ans.clear();
                ans.add(Arrays.asList(a, b));
                mi = d;
            } else if (d == mi) {
                ans.add(Arrays.asList(a, b));
            }
        }
        return ans;
    }
}

C++

class Solution {
public:
    vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
        sort(arr.begin(), arr.end());
        int mi = INT_MAX;
        int n = arr.size();
        vector<vector<int>> ans;
        for (int i = 0; i < n - 1; ++i) {
            int a = arr[i], b = arr[i + 1];
            int d = b - a;
            if (d < mi) {
                mi = d;
                ans.clear();
                ans.push_back({a, b});
            } else if (d == mi)
                ans.push_back({a, b});
        }
        return ans;
    }
};

Go

func minimumAbsDifference(arr []int) [][]int {
	sort.Ints(arr)
	mi := math.MaxInt32
	var ans [][]int
	for i, a := range arr[:len(arr)-1] {
		b := arr[i+1]
		d := b - a
		if d < mi {
			mi = d
			ans = [][]int{[]int{a, b}}
		} else if d == mi {
			ans = append(ans, []int{a, b})
		}
	}
	return ans
}

...