c++求一个数组中所有数字分为两半差最小完整代码
时间: 2024-10-05 07:04:09 浏览: 34
C++实现数字转换为十六进制字符串的方法
在C++中,要找出一个整数数组中,将数组分为两部分使得它们的元素之和的绝对差值最小,可以使用动态规划的方法。这里是一个简单的示例代码:
```cpp
#include <vector>
#include <algorithm>
int minAbsDifference(std::vector<int>& nums) {
std::sort(nums.begin(), nums.end()); // 先对数组进行排序
int total = 0;
for (const auto& num : nums) {
total += num;
}
int half = total / 2; // 总和的一半作为目标值
int best_diff = INT_MAX; // 初始化最佳差值为最大整数值
int prefix_sum = 0; // 前缀和数组
for (int i = 0; i < nums.size(); ++i) {
prefix_sum += nums[i]; // 更新前缀和
best_diff = std::min(best_diff, abs(prefix_sum - half)); // 记录当前分割点产生的差值
}
return best_diff;
}
int main() {
std::vector<int> nums = {1, 7, 4, 9, 2, 5}; // 测试数组
int result = minAbsDifference(nums);
std::cout << "The minimum absolute difference is: " << result << std::endl;
return 0;
}
```
这个程序首先对数组进行排序,然后遍历数组计算前缀和,同时更新最佳差值。最后返回的就是使得数组分为两半时,差值绝对值最小时的差值。
阅读全文