📌  相关文章
📜  使所有数组元素相等所需的除法计数最小化 2(1)

📅  最后修改于: 2023-12-03 14:49:36.243000             🧑  作者: Mango

使所有数组元素相等所需的除法计数最小化 2

问题描述

给定一个长度为n的整数数组nums,每次可以将数组中任意一个元素除以2,直到所有元素均相等。求最少需要多少次操作。

解题思路

由于每次只能将一个元素除以2,因此我们考虑将所有元素除以2,这样所有偶数位上的元素都变为了原来的一半,然后我们再将所有偶数位上的元素继续除以2,以此类推,直到所有元素都相等。

注意到由于要将一个整数除以2,因此如果一个元素不是偶数,那么它必须要被减去1才能进行除法操作。因此,我们可以将所有元素减去它们二进制下的最后一位1所表示的数,将它们变为偶数,然后再进行除法操作。这一做法的时间复杂度为$O(n \log \max { \text{nums} })$。

代码实现
class Solution:
    def minOperations(self, nums: List[int]) -> int:
        ans = 0
        while any(num % 2 == 1 for num in nums):
            for i in range(len(nums)):
                if nums[i] % 2 == 1:
                    nums[i] -= 1
                    ans += 1
            nums = [num // 2 for num in nums]
            ans += 1
        return ans
复杂度分析

时间复杂度:$O(n \log \max { \text{nums} })$。

空间复杂度:$O(1)$。