社区讨论LinuxDo 最新
Leetcode每日一题 —— 2333. 最小差值平方和
力扣 LeetCode 2333. 最小差值平方和 - 力扣(LeetCode) 2333. 最小差值平方和 - 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,长度为 n 。 数组 nums1 和 nums2 的 差值平方和 定义为所有满足 0 (n-1)^2-(n-2)^2,所以我们显然应该用贪心从最大数开始浮动。 一开始用 PriorityQueue 能过但太慢了,换成 Array 排序快多了。 代码 class Solution { public long minSumSquareDif…
内容摘要
作者:#魔法师
板块:#开发调优
力扣 LeetCode
2333. 最小差值平方和 - 力扣(LeetCode)
2333. 最小差值平方和 - 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,长度为 n 。
数组 nums1 和 nums2 的 差值平方和 定义为所有满足 0 <= i < n 的 (nums1[i] - nums2[i])2 之和。
同时给你两个正整数 k1 和 k2 。你可以将 nums1 中的任意元素 +1 或者 -1 至多 k1 次。类似的,你可以将 nums2 中的任意元素 +1...
思路
题目等价于给一个数组diff[n],元素可上下浮动k,求最小平方和。其中diff[i]=Math.abs(nums1[i]-nums2[i]); k=k1+k2。
全是正数的情况下 n^2-(n-1)^2 > (n-1)^2-(n-2)^2,所以我们显然应该用贪心从最大数开始浮动。
一开始用 PriorityQueue 能过但太慢了,换成 Array 排序快多了。
代码
class Solution {
public long minSumSquareDiff(int[] nums1, int[] nums2, int k1, int k2) {
int n = nums1.length;
int[] diffs = new int[n];
for (int i = 0; i < n; i++) {
diffs[i] = Math.abs(nums1[i] - nums2[i]);
}
long ans = 0;
long k = k1 + k2;
int cnt = 1;
Arrays.sort(diffs);
int max = diffs[n - 1];
i
资讯来源
LinuxDo