列表

详情


3424. 将数组变相同的最小代价

给你两个长度都为 n 的整数数组 arr 和 brr 以及一个整数 k 。你可以对 arr 执行以下操作任意次:

请你返回将 arr 变为 brr 的 最小 总代价。

子数组 是一个数组中一段连续 非空 的元素序列。

 

示例 1:

输入:arr = [-7,9,5], brr = [7,-2,-5], k = 2

输出:13

解释:

将两个数组变相等的总代价为 2 + 2 + 7 + 2 = 13 。

示例 2:

输入:arr = [2,1], brr = [2,1], k = 0

输出:0

解释:

由于数组已经相等,不需要进行任何操作,所以总代价为 0 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: long long minCost(vector<int>& arr, vector<int>& brr, long long k) { } };

java 解法, 执行用时: 21 ms, 内存消耗: 56.1 MB, 提交时间: 2025-01-26 09:28:39

class Solution {
    public long minCost(int[] a, int[] b, long k) {
        long ans2 = 0;
        for (int i = 0; i < a.length; i++) {
            ans2 += Math.abs(a[i] - b[i]);
        }
        if (ans2 <= k) {
            return ans2;
        }

        Arrays.sort(a);
        Arrays.sort(b);
        long ans1 = k;
        for (int i = 0; i < a.length; i++) {
            ans1 += Math.abs(a[i] - b[i]);
        }

        return Math.min(ans1, ans2);
    }
}

cpp 解法, 执行用时: 27 ms, 内存消耗: 185 MB, 提交时间: 2025-01-26 09:28:09

class Solution {
public:
    long long minCost(vector<int>& a, vector<int>& b, long long k) {
        long long ans2 = 0;
        for (int i = 0; i < a.size(); i++) {
            ans2 += abs(a[i] - b[i]);
        }
        if (ans2 <= k) {
            return ans2;
        }

        ranges::sort(a);
        ranges::sort(b);
        long long ans1 = k;
        for (int i = 0; i < a.size(); i++) {
            ans1 += abs(a[i] - b[i]);
        }

        return min(ans1, ans2);
    }
};

python3 解法, 执行用时: 95 ms, 内存消耗: 32.9 MB, 提交时间: 2025-01-26 09:27:57

class Solution:
    def minCost(self, a: List[int], b: List[int], k: int) -> int:
        ans2 = sum(abs(x - y) for x, y in zip(a, b))
        if ans2 <= k:
            return ans2

        a.sort()
        b.sort()
        ans1 = sum(abs(x - y) for x, y in zip(a, b)) + k
        return min(ans1, ans2)

golang 解法, 执行用时: 10 ms, 内存消耗: 10.3 MB, 提交时间: 2025-01-26 09:27:29

// 贪心
func minCost(a, b []int, k int64) int64 {
	ans2 := int64(0)
	for i, x := range a {
		ans2 += int64(abs(x - b[i]))
	}
	if ans2 <= k {
		return ans2
	}

	slices.Sort(a)
	slices.Sort(b)
	ans1 := k
	for i, x := range a {
		ans1 += int64(abs(x - b[i]))
	}

	return min(ans1, ans2)
}

func abs(x int) int { if x < 0 { return -x }; return x }

上一题