📜  门| GATE-CS-2017(Set 1)|问题6(1)

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

门 | GATE-CS-2017(Set 1)|问题6

这是GATE-CS-2017(Set 1)的第6个问题,主要考察编程问题的解决能力。题目描述如下:

给定一个数组A,它包含n个正整数。对于每个i (1 ≤ i ≤ n),找到最小的j (j ≥ i),使得A[j] > A[i] 或者没有这样的j,然后输出j-i-1。

以下是一个示例: Input: A = {6, 7, 3, 4, 5, 6, 1, 2} Output: {1, 3, 2, 2, 1, 1, 7, 7}

解题思路
  • 首先我们需要遍历数组A,以每个数为起始位置,确定其后面最小数的下标j。对于A中最后的元素,其j值为n。
  • 遍历过程中,我们可以使用两个指针,i和j。如果A[j] <= A[i],则我们继续将j向后移动。直到 A[j] > A[i] 或者 j = n的时候,我们不再移动指针,记录结果j-i-1到结果集res中即可。
时间复杂度

时间复杂度为O(n),因为我们遍历了一次数组A。

代码实现

以下是Python代码的实现,返回值为结果集res。

def find_minimum_distance_to_greater_number(A):
    n = len(A)
    res = [0]*n
  
    i = 0
    while i < n:
        j = i+1
    
        while j < n and A[j] <= A[i]:
            j += 1
    
        if j == n:
            res[i] = n-i-1
        else:
            res[i] = j-i-1
    
        i += 1
  
    return res