题目链接
题意:存在一个长度为
n
n
n的数组
a
r
r
arr
arr,其中
a
r
r
[
i
]
=
(
2
∗
i
)
+
1
(
0
<
=
i
<
n
)
arr[i]=(2*i)+1 (0 <= i < n )
arr[i]=(2∗i)+1(0<=i<n)。
一次操作中,你可以选出两个下标,记作
x
和
y
(
0
<
=
x
,
y
<
n
)
x 和 y ( 0 <= x, y < n )
x和y(0<=x,y<n)并使
a
r
r
[
x
]
arr[x]
arr[x] 减去
1
1
1 、
a
r
r
[
y
]
arr[y]
arr[y] 加上
1
1
1 (即
a
r
r
[
x
]
−
=
1
且
a
r
r
[
y
]
+
=
1
arr[x] -=1 且 arr[y] += 1
arr[x]−=1且arr[y]+=1 )。最终的目标是使数组中的所有元素都相等。题目测试用例将会保证:在执行若干步操作后,数组中的所有元素最终可以全部相等。
给你一个整数 n,即数组的长度。请你返回使数组 arr 中所有元素相等所需的 最小操作数。
思路:显然对于确定的
n
n
n答案是固定的,我们直接推导公式即可,分一下奇偶讨论,答案是等差数列求和。
AC代码:
class Solution {
public:
int minOperations(int n) {
if(n==1) return 0;
if(n&1) return (2+(n/2)*2)*(n/2)/2;
else return (n/2)*(n/2);
}
};