题意:
给你一个长度为
n
n
n 的整数数组
S
S
S ,将其按照下标分为两组,
S
1
,
S
2
…
…
S
j
S_{1} , S_{2}……S_{j}
S1,S2……Sj 以及
S
j
+
1
,
S
j
+
2
…
…
S
n
(
1
≤
j
<
n
)
S_{j+1} , S_{j+2}……S_{n}(1≤j<n)
Sj+1,Sj+2……Sn(1≤j<n)
设
l
=
S
1
+
S
2
…
…
S
j
,
r
=
S
j
+
1
+
S
j
+
2
…
…
S
n
l=S_{1} + S_{2}……S_{j},r=S_{j+1} + S_{j+2}……S_{n}
l=S1+S2……Sj,r=Sj+1+Sj+2……Sn
考虑所有可能的做法,并求出 ∣ l − r ∣ \lvert l-r \rvert ∣l−r∣的最小值
思路:
由于数据小,直接从左到右直接遍历节点即可
时间复杂度: O ( n ) O(n) O(n)
#include <bits/stdc++.h>
using namespace std;
int n;
int s[110];
int main() {
scanf("%d", &n);
int res = 0;
for (int i = 1; i <= n; i++) {
scanf("%d", &s[i]);
res += s[i];
}
int cnt = 0x3f3f3f3f, ans = 0;
for (int i = 1; i < n; i++) {
ans += s[i];
cnt = min(cnt, abs(res - 2 * ans));
}
printf("%d", cnt);
return 0;
}