珠江现代建设 杂志社网站,施工企业质量管理制度,银川网站制作,标识设计是什么题目#xff1a;
你有两个果篮#xff0c;每个果篮中有 n 个水果。给你两个下标从 0 开始的整数数组 basket1 和 basket2 #xff0c;用以表示两个果篮中每个水果的成本。
你希望两个果篮相等。为此#xff0c;可以根据需要多次执行下述操作#xff1a;
选中两个下标 i…题目
你有两个果篮每个果篮中有 n 个水果。给你两个下标从 0 开始的整数数组 basket1 和 basket2 用以表示两个果篮中每个水果的成本。
你希望两个果篮相等。为此可以根据需要多次执行下述操作
选中两个下标 i 和 j 并交换 basket1 中的第 i 个水果和 basket2 中的第 j 个水果。 交换的成本是 min(basket1i,basket2j) 。 根据果篮中水果的成本进行排序如果排序后结果完全相同则认为两个果篮相等。
返回使两个果篮相等的最小交换成本如果无法使两个果篮相等则返回 -1 。
示例 1
输入basket1 [4,2,2,2], basket2 [1,4,1,2] 输出1 解释交换 basket1 中下标为 1 的水果和 basket2 中下标为 0 的水果交换的成本为 1 。此时basket1 [4,1,2,2] 且 basket2 [2,4,1,2] 。重排两个数组发现二者相等。 示例 2
输入basket1 [2,3,4,1], basket2 [3,2,5,1] 输出-1 解释可以证明无法使两个果篮相等。
提示
basket1.length bakste2.length 1 basket1.length 10^5 1 basket1i,basket2i 10^9
java代码
class Solution {public long minCost(int[] basket1, int[] basket2) {var cnt new HashMapInteger, Integer();for (int i 0; i basket1.length; i) {cnt.merge(basket1[i], 1, Integer::sum);cnt.merge(basket2[i], -1, Integer::sum);}int mn Integer.MAX_VALUE;var a new ArrayListInteger();for (var e : cnt.entrySet()) {int x e.getKey(), c e.getValue();if (c % 2 ! 0) return -1;mn Math.min(mn, x);for (c Math.abs(c) / 2; c 0; --c)a.add(x);}long ans 0;a.sort((x, y) - x - y); // 也可以用快速选择for (int i 0; i a.size() / 2; i)ans Math.min(a.get(i), mn * 2);return ans;}
}