📌  相关文章
📜  从数组arr []生成一个N长度的数组A [],使arr [i]是由A [i]的倍数组成的最后一个索引(1)

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

从数组arr[]生成一个N长度的数组A[],使arr[i]是由A[i]的倍数组成的最后一个索引

在这个问题中,我们需要生成一个长度为N的数组A[],满足arr[i]是由A[i]的倍数组成的最后一个索引。

我们可以通过以下步骤解决这个问题:

  1. 遍历数组arr[],找到arr[i]的最大值max。
  2. 生成一个长度为max+1的新数组B[],并且将其所有值初始化为0。
  3. 再次遍历数组arr[],并且对于每个元素arr[i],将B[arr[i]]的值加1。
  4. 遍历新数组B[],从索引1开始,将所有B[i]的值加上前一个索引的B[i-1]的值。
  5. 生成长度为N的新数组A[],并且将其所有值初始化为0。
  6. 最后一次遍历数组arr[],对于每个元素arr[i],将A[i]设置为B[arr[i]] - 1,并且将B[arr[i]]的值减去1以避免重复计算。

以下是Python代码的实现:

def generate_array(arr):
    max_val = max(arr)
    B = [0] * (max_val + 1)
    for val in arr:
        B[val] += 1
    for i in range(1, max_val + 1):
        B[i] += B[i-1]
    A = [0] * len(arr)
    for i, val in enumerate(arr):
        A[i] = B[val] - 1
        B[val] -= 1
    return A

这个函数将输入一个数组arr[],并且返回一个长度为N的数组A[],其中每个元素A[i]都是arr[i]的倍数的最后一个索引。