📌  相关文章
📜  左侧可被当前元素整除的元素数 | 2套(1)

📅  最后修改于: 2023-12-03 15:39:22.736000             🧑  作者: Mango

左侧可被当前元素整除的元素数 | 2套

在进行数据处理时,有时需要获取一个元素与其左侧元素中有多少个元素可以被它整除。这个问题可以通过以下两种解决方案来解决。

解决方案一
def solution1(nums: List[int]) -> List[int]:
    res = []
    for i in range(len(nums)):
        count = 0
        for j in range(i):
            if nums[i] % nums[j] == 0:
                count += 1
        res.append(count)
    return res

该函数的思路是对于每个元素i,循环遍历前面的元素j,如果j能够被i整除,则计数器count加1。最后将count加入结果数组res中。该函数的时间复杂度为O(n^2)。

解决方案二
def solution2(nums: List[int]) -> List[int]:
    max_num = max(nums)
    factor_counts = [0] * (max_num + 1)
    res = []
    for i in nums:
        count = 0
        for j in range(1, int(i ** 0.5) + 1):
            if i % j == 0:
                count += factor_counts[j]
                if j != i // j:
                    count += factor_counts[i // j]
        factor_counts[i] += 1
        res.append(count)
    return res

该函数的思路是对于每个元素i,循环遍历其所有的因数,如果其因数j存在,则计数器count加上因数j的出现次数。同时,将i的因数个数加1。最后将count加入结果数组res中。该函数的时间复杂度为O(n * sqrt(max_num))。

参数说明
  • nums: 整数列表,表示输入的数组。
返回值说明
  • res: 整数列表,表示对于每个元素i,其左侧可以被其整除的元素数量。

以上是两种解决方案的代码和说明,根据数据规模的大小和时间复杂度的要求,可以选择其中合适的方案。