赞
踩
给你两个整数数组 nums1 和 nums2。
从 nums1 中移除两个元素,并且所有其他元素都与变量 x 所表示的整数相加。如果 x 为负数,则表现为元素值的减少。
执行上述操作后,nums1 和 nums2 相等 。当两个数组中包含相同的整数,并且这些整数出现的频次相同时,两个数组 相等 。
返回能够实现数组相等的 最小 整数 x 。
输入:nums1 = [4,20,16,12,8], nums2 = [14,18,10]
输出:-2
解释:
移除 nums1 中下标为 [0,4] 的两个元素,并且每个元素与 -2 相加后,nums1 变为 [18,14,10] ,与 nums2 相等。
输入:nums1 = [3,5,5,3], nums2 = [7,7]
输出:2
解释:
移除 nums1 中下标为 [0,3] 的两个元素,并且每个元素与 2 相加后,nums1 变为 [7,7] ,与 nums2 相等。
class Solution { public int minimumAddedInteger(int[] nums1, int[] nums2) { // 将两个数组排序 Arrays.sort(nums1); Arrays.sort(nums2); // 排序后,枚举nums1的前三个元素和nums2的第一个元素作差值 for (int i = 2; i >= 0; i--) {// 倒序,保证当前枚举结果满足子序列时,直接返回最小整数 int diff = nums2[0] - nums1[i];// 差值 int j = 0;// 判断当前差值是否能够满足:nums2为nums1的子序列 for (int k = i; k < nums1.length; k++) {// 从当前i开始遍历nums1数组 if (j < nums2.length && nums2[j] - nums1[k] == diff) { // 判断nums2是否存在满足diff的元素 j++;// 计数加一 if (j == nums2.length) {// 如果nums2全部满足,即nums2就是nums1的子序列 return diff;// 返回当前枚举结果 } } } } return 0;// 本题不存在没有结果的情况 } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。