给你个整数数组 arr,其中每个元素都 不相同。
请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。
每对元素对 [a,b] 如下:
a , b 均为数组 arr 中的元素
a < b
b - a 等于 arr 中任意两个元素的最小绝对差
输入:arr = [4,2,1,3] 输出:[[1,2],[2,3],[3,4]]
解题思路:题目要求我们找到具有最小的绝对差的元素对,我们可以使用Arrays.sort();对数组arr进行快速排序,那么最小的绝对差的元素对一定是相邻的两个数。
public List<List<Integer>> minimumAbsDifference(int[] arr) {
List<List<Integer>> list = new ArrayList<>();//建立一个队列
Arrays.sort(arr);//对数组arr进行排序
int min = Integer.MAX_VALUE;//将最小值定义为最大值
for(int i=1;i<arr.length;i++){ //遍历数组
int m=arr[i-1],n=arr[i];
int sub =n-m;
if(sub<min){ //如果现在传入的两个数与之前的最小绝对值小,则更新min
min=sub;
list.clear();//并将原来list中的数据清空 填入新的最小两个数
List<Integer> element = new ArrayList<>(); //创建一个一维队列
element.add(m); //数组element 填入两个绝对值最小的数
element.add(n);
list.add(element);
}
else if(sub==min){ //如果现在传入的两个数与之前的最小绝对值相等 那么也加入list
List<Integer> element = new ArrayList<>();
element.add(m);
element.add(n);
list.add(element);
}
}
return list;
}
题目链接:https://leetcode.cn/problems/minimum-absolute-difference