Given an array of distinct integers arr, find all pairs of elements with the minimum absolute difference of any two elements.
Return a list of pairs in ascending order(with respect to pairs), each pair [a, b] follows
・ a, b are from arr ・ a < b ・ b - a equals to the minimum absolute difference of any two elements in arr
Example 1:
Input: arr = [4,2,1,3] Output: [[1,2],[2,3],[3,4]] Explanation: The minimum absolute difference is 1. List all pairs with difference equal to 1 in ascending order.
Example 2:
Input: arr = [1,3,6,10,15] Output: [[1,3]]
Example 3:
Input: arr = [3,8,-10,23,19,-4,-14,27] Output: [[-14,-10],[19,23],[23,27]]
Constraints:
・ 2 <= arr.length <= 10⁵ ・ -10⁶ <= arr[i] <= 10⁶
아주 쉬운 문제다.
우선 주어진 배열을 정렬한다. 이후 배열을 탐색하면서 인접한 값의 차가 최소가 되는 값을 구한다. 배열을 탐색해서 최소가 되는 값과 같을 경우 list에 두 쌍을 추가해준다.
list를 리턴하면 끝!
class Solution {
public List<List<Integer>> minimumAbsDifference(int[] arr) {
Arrays.sort(arr);
int minAbs = Integer.MAX_VALUE;
for (int i=0; i < arr.length-1; i++) {
if (minAbs > arr[i+1] - arr[i]) {
minAbs = arr[i+1] - arr[i];
}
}
List<List<Integer>> res = new ArrayList<>();
for (int i=0; i < arr.length-1; i++) {
if (minAbs == arr[i+1] - arr[i]) {
res.add(Arrays.asList(arr[i], arr[i+1]));
}
}
return res;
}
}
운이 좋아서 그런지 결과가 잘 나왔다.