1551. 使数组中所有元素相等的最小操作数
难度中等17收藏分享切换为英文接收动态反馈
存在一个长度为 n
的数组 arr
,其中 arr[i] = (2 * i) + 1
( 0 <= i < n
)。
一次操作中,你可以选出两个下标,记作 x
和 y
( 0 <= x, y < n
)并使 arr[x]
减去 1
、arr[y]
加上 1
(即 arr[x] -=1
且 arr[y] += 1
)。最终的目标是使数组中的所有元素都 相等 。题目测试用例将会 保证 :在执行若干步操作后,数组中的所有元素最终可以全部相等。
给你一个整数 n
,即数组的长度。请你返回使数组 arr
中所有元素相等所需的 最小操作数 。
示例 1:
1 | 输入:n = 3 |
示例 2:
1 | 输入:n = 6 |
提示:
1 <= n <= 10^4
题目 $arr[i] = (2 * i) + 1$ 的数字是$1、3、5、7、9、11、13、15$
- 如果 $n$ 是奇数,所有的数字都变成中间的数字即 $i=n/2$ 的那个数字
- 如果 $n$ 是偶数,中间的两个数字的 $index$ 是 $n-1/2$和$n-1/2+1$
结果是中间的那个值 $mid$ 减去它前面的每个数字$nums[i]$得到的结果的和
1 | class Solution { |
贪心
只计算大于n的那一半的值
当$arr[i] = (2 * i) + 1 > n$时 $i=(n-1)/2$也就是中间的 $index$,与上述思路基本一致
1 | class Solution { |
数学
当$n$为奇数时
$\begin{aligned}
A N S &=\sum_{i=\frac{n-1}{2}}^{n-1}(2 \times i+1-n) \
&=(1-n) \times\left(n-1-\frac{n-1}{2}+1\right)+2 \times \sum_{i=\frac{n-1}{2}}^{n-1} i \
&=\frac{(1-n) \times(n+1)}{2}+2 \times \frac{(n+1) \times(3 \times n-3)}{8} \
&=\frac{n^{2}-1}{4}
\end{aligned}$
当$n$为偶数时
$\begin{aligned}
A N S &=\sum_{i=\frac{1}{2}}^{n-1}(2 \times i+1-n) \
&=(1-n) \times\left(n-1-\frac{n}{2}+1\right)+2 \times \sum_{i=\frac{n}{2}}^{n-1} \
&=\frac{(1-n) \times n}{2}+2 \times \frac{n \times(3 \times n-2)}{8} \
&=\frac{n^{2}}{4}
\end{aligned}$
注意到 $\frac{n^2 - 1}{4}=\lfloor \frac{n^2}{4}\rfloor$
我们可以直接用整除来算出结果。
1 | class Solution { |