受限可以尝试展开每一项的公式。
1: 2*(i)+ 1
2*(i)+ 1 + 0
2: 2*(i+1)+ 1
2*(i)+ 1 + 2
3: 2*(i+2) + 1
2*(i) + 1 + 4
4: 2*(i+3) + 1
2*(i) + 1 + 6
5: 2*(i+4) + 1
2*(i) + 1 + 8
6: 2*(i+5) + 1
2*(i) + 1 + 10
。
。
。
好了,可以看出序列里逐渐多出来的数字增加的量是(0 2 4 6 8 10 。。。)
如果给的n是odd的,那中间数就是最后的equal的数字,比如n=5,多余的数量数列就是(0 2 4 6 8),2 6 需要操作两次变为4 4,0 8 操作4次变为4 4。所以,以此类推可知,操作数量就是 2 4 6 8 10 12。。。取决于有多少对数字需要做操作,也就是(n-1)//2。而如果n是偶数,比如n = 6. 增加量的数列是0 2 4 6 8 10,最中间的数字是4 6, 操作一次得到 5 5, 2 8操作三次得到 5 5,1 10操作5次得到5 5. 由此可知,如果n为偶数,有n//2对数需要才做,且数量是 1 3 5 7 9 11。。。。好了,这样就可以写代码了。
class Solution:
def minOperations(self, n: int) -> int:
res = 0
if n % 2 ==1:
n -= 1
i = 2
else:
i = 1
while n > 0:
res += i
i += 2
n -= 2
return res