酷代码 AI
菜单
服务商

给定两个长度为 n 的整数数组 A 和 B。每次操作可以选择数组 A 中的一个元素和数组 B 中的一个元素(可以是任意位置,包括相同位置),将它们各自加 1。求最少需要多少次操作,才能使数组 A 和数组 B 完全相等(即 A[i] = B[i] 对所有 i 成立)。如果无法使两个数组相等,则输出 -1。 作者:relimount 链接:https://www.nowcoder.com/feed/main/detail/d3efc76fe5ea40a98a3451ca43697f5f?sourceSSR=search 来源:牛客网 语言方向:C++

以下是解决该问题的 C++ 代码: ```cpp #include <iostream> #include <vector> // 函数用于计算使两个数组相等所需的最少操作次数 int minOperationsToEqual(std::vector<int>& A, std::vector<int>& B) { int n = A.size(); // 首先检查两个数组对应元素差值的总和是否为偶数 // 因为每次操作是同时对 A 和 B 中的元素加 1,所以两个数组对应元素差值的总和必须是偶数才能使它们相等 int diffSum = 0; for (int i = 0; i < n; ++i) { diffSum += A[i] - B[i]; } if (diffSum % 2 != 0) { return -1; } // 计算需要的操作次数 int operations = 0; for (int i = 0; i < n; ++i) { int diff = A[i] - B[i]; if (diff > 0) { // 如果 A[i] 大于 B[i],则需要将 B[i] 增加到 A[i] operations += diff; } } return operations; } int main() { std::vector<int> A = {1, 2, 3}; std::vector<int> B = {2, 3, 4}; int result = minOperationsToEqual(A, B); std::cout << "最少操作次数: " << result << std::endl; return 0; } ``` 代码解释 1. 检查差值总和是否为偶数:首先遍历两个数组,计算 `A[i] - B[i]` 的总和。因为每次操作是同时对 `A` 和 `B` 中的元素加 1,所以两个数组对应元素差值的总和必须是偶数才能使它们相等。如果差值总和是奇数,则无法使两个数组相等,返回 -1。 2. 计算操作次数:再次遍历数组,对于 `A[i] > B[i]` 的情况,计算需要将 `B[i]` 增加到 `A[i]` 的操作次数,并累加到 `operations` 中。 需要小心的地方 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 要确保输入的两个数组长度相等,否则代码可能会出现越界访问的错误。 2. 在计算差值总和时,要注意数据类型的选择,避免溢出问题。 3. 对于无法使两个数组相等的情况,要正确处理并返回 -1,避免出现逻辑错误。 [2025-11-05 22:15:18 | AI写代码神器 | 605点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多