给定一个由若干整数组成的数组 nums,我们可以在数组内的任意位置进行分割,将该数组分割成两个非空子数组(即左数组和右数组),分别对子数组求和得到两个值,计算这两个值的差值,请输出所有分割方案中,差值最大的值。
我们需要在数组 nums 中找到一个分割点,使得左子数组和右子数组的和之差最大。可以通过以下步骤来实现:
total。left_sum 来维护左子数组的和。left_sum,同时计算右子数组的和 right_sum = total - left_sum。abs(left_sum - right_sum),并更新最大差值。#include <iostream>
#include <vector>
#include <cstdlib> // abs函数
using namespace std;
int maxDifference(const vector<int>& nums) {
int total = 0, left_sum = 0, max_diff = 0;
// 计算数组总和
for (int num : nums) {
total += num;
}
// 遍历并计算差值
for (int i = 0; i < nums.size() - 1; ++i) {
left_sum += nums[i];
int right_sum = total - left_sum;
max_diff = max(max_diff, abs(left_sum - right_sum));
}
return max_diff;
}
int main() {
int n;
cin >> n; // 输入元素个数
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
cin >> nums[i]; // 输入数字序列
}
cout << maxDifference(nums) << endl; // 输出最大差值
return 0;
}
def max_difference(nums):
total = sum(nums) # 计算数组总和
left_sum = 0
max_diff = 0
# 遍历并计算差值
for i in range(len(nums) - 1):
left_sum += nums[i]
right_sum = total - left_sum
max_diff = max(max_diff, abs(left_sum - right_sum))
return max_diff
def main():
n = int(input()) # 输入元素个数
nums = list(map(int, input().split())) # 输入数字序列
print(max_difference(nums)) # 输出最大差值
if __name__ == "__main__":
main()
import java.util.Scanner;
public class Main {
public static int maxDifference(int[] nums) {
int total = 0, leftSum = 0, maxDiff = 0;
// 计算数组总和
for (int num : nums) {
total += num;
}
// 遍历并计算差值
for (int i = 0; i < nums.length - 1; i++) {
leftSum += nums[i];
int rightSum = total - leftSum;
maxDiff = Math.max(maxDiff, Math.abs(leftSum - rightSum));
}
return maxDiff;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); // 输入元素个数
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = scanner.nextInt(); // 输入数字序列
}
System.out.println(maxDifference(nums)); // 输出最大差值
scanner.close();
}
}
给定一个由若干整数组成的数组 nums ,可以在数组内的任意位置进行分割,将该数组分割成两个非空子数组(即左数组和右数组),分别对子数组求和得到两个值,计算这两个值的差值,请输出所有分割方案中,差值最大的值。
第一行输入数组中元素个数 n ,1<n≤100000 第二行输入数字序列,以空格进行分隔,数字取值为 4 字节整数
输出差值的最大取值
输入
6
1 -2 3 4 -9 7
输出
10
说明
将数组 nums 划分为两个非空数组的可行方案有:
左数组 = [1] 且 右数组 = [-2,3,4,-9,7],和的差值 = | 1 - 3 | = 2
左数组 = [1,-2] 且 右数组 = [3,4,-9,7],和的差值 = | -1 - 5 | =6
左数组 = [1,-2,3] 且 右数组 = [4,-9,7],和的差值 = | 2 - 2 | = 0
左数组 = [1,-2,3,4] 且右数组=[-9,7],和的差值 = | 6 - (-2) | = 8,
左数组 = [1,-2,3,4,-9] 且 右数组 = [7],和的差值 = | -3 - 7| = 10最大的差值为10