0
点赞
收藏
分享

微信扫一扫

Leetcode 1551. Minimum Operations to Make Array Equal [Python]

Ad大成 2022-01-31 阅读 51

受限可以尝试展开每一项的公式。

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
举报

相关推荐

0 条评论