📜  门| GATE 2017 MOCK II |第 41 题(1)

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

GATE 2017 MOCK II | 第 41 题

这是一道 GATE 2017 MOCK II 的题目,题目编号为41。

题目描述

给定一个长度为N的数组A,对于每个i,其中 i∈[0,N-1],需要找出数组中下标大于等于i的所有元素中,离A[i]最近且大于A[i]的元素。

例如,对于数组A=[2,3,6,7,1,9,4],对于i=0,输出3;对于i=1,输出6;对于i=3,输出9;对于i=4,输出9;对于i=6,输出null。

解题思路

这道题需要我们找出数组中某一位置后面离它最近且大于它的数。从题目中可以看出这道题并不是很难,只需要运用到最基本的数组操作即可。

我们可以从i到n-1遍历一遍整个数组;使用一个变量match记录大于A[i]的最小值,如果找到了比A[i]大的数,就更新match。最后如果match仍为初始值,则输出null,否则输出match。

参考代码
def next_largest(A):
    n = len(A)
    res = [0] * n
    for i in range(n):
        match = float('inf')
        for j in range(i+1, n):
            if A[j] > A[i] and A[j] < match:
                match = A[j]
        res[i] = match if match!=float('inf') else None
    return res
总结

这是一道不错的算法题,使用了比较基础的数组操作。虽然和某些工程项目中的算法并不相同,但这道题可以增强我们的基本数据结构和算法知识储备,对我们的编程水平和思维拓展都有很好的帮助。