|
| 1 | +package com.leetcode_cn.easy; |
| 2 | +/******************最小绝对差**************/ |
| 3 | + |
| 4 | +import java.util.ArrayList; |
| 5 | +import java.util.Arrays; |
| 6 | +import java.util.List; |
| 7 | + |
| 8 | +/** |
| 9 | + * 给你个整数数组 arr,其中每个元素都 不相同。 |
| 10 | + * |
| 11 | + * 请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。 |
| 12 | + * |
| 13 | + * |
| 14 | + * |
| 15 | + * 示例 1: |
| 16 | + * 输入:arr = [4,2,1,3] |
| 17 | + * 输出:[[1,2],[2,3],[3,4]] |
| 18 | + * |
| 19 | + * 示例 2: |
| 20 | + * 输入:arr = [1,3,6,10,15] |
| 21 | + * 输出:[[1,3]] |
| 22 | + * |
| 23 | + * 示例 3: |
| 24 | + * 输入:arr = [3,8,-10,23,19,-4,-14,27] |
| 25 | + * 输出:[[-14,-10],[19,23],[23,27]] |
| 26 | + * |
| 27 | + * |
| 28 | + * 提示: |
| 29 | + * |
| 30 | + * 2 <= arr.length <= 10^5 |
| 31 | + * -10^6 <= arr[i] <= 10^6 |
| 32 | + * |
| 33 | + */ |
| 34 | +public class MinimumAbsoluteDifference { |
| 35 | + |
| 36 | + public List<List<Integer>> minimumAbsDifference(int[] arr) { |
| 37 | + |
| 38 | + List<List<Integer>> list = new ArrayList<>(); |
| 39 | + // 升序 |
| 40 | + Arrays.sort(arr); |
| 41 | + // 差值 |
| 42 | + int dv = Math.abs(arr[0] - arr[1]); |
| 43 | + List<Integer> list1 = new ArrayList<>(); |
| 44 | + list1.add(arr[0]); |
| 45 | + list1.add(arr[1]); |
| 46 | + list.add(list1); |
| 47 | + for (int i = 1; i < arr.length - 1; i++) { |
| 48 | + int dvTemp = Math.abs(arr[i] - arr[i+1]); |
| 49 | + if (dvTemp <= dv) { |
| 50 | + List<Integer> list2 = new ArrayList<>(); |
| 51 | + list2.add(arr[i]); |
| 52 | + list2.add(arr[i+1]); |
| 53 | + if (dvTemp < dv) { |
| 54 | + list.clear(); // 清空原先的 |
| 55 | + dv = dvTemp; // 新的差值 |
| 56 | + } |
| 57 | + list.add(list2); |
| 58 | + } |
| 59 | + } |
| 60 | + return list; |
| 61 | + } |
| 62 | +} |
0 commit comments