1818. 绝对差值和
思路:排序 + 二分查找
Java中没有结构体,使用类来替代具体的结构体。
时间复杂度:O(log n)
空间复杂度:O(n)
- 先计算数字1与数字2两个数的差值,保存数组2里面数字和数字1与数字2的差值的对应关系。
- 将数组1排序,采用二分查找去找最接近数字2的数字1。
- 重新计算差值,保存两个差值的差。
- 只保留两个差值的差的最大值。
- 如果数字1与数字2两个数的差值小于保存下来的最大的值,证明即使替换此时的数字1,也无法贡献更小的差值,则不计算。
比如:100,1 一组数据,差值为99,将100 替换为1,差值变化值为98。
第二组为10,1。差值为9,小于98,此时无论将10替换为1 - 9 中任何数值,都无法贡献更大的差值变化值,故不计算。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 1818. 绝对差值和
*
*/
public class Solution1818 {
public static class NumPair{
public int nums2;
public int difference;
}
private final static int MOD = 1000000007;
public int minAbsoluteSumDiff(int[] nums1, int[] nums2) {
int len = nums1.length;
List<NumPair> numPairs = new ArrayList<