返回 AI 资讯
社区讨论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

原文链接

打开原文