美团数据分析笔试python编程题

这篇博客讨论了一个算法问题,即给定一个整数数组,计算每个元素向右移动多少步可以遇到大于它的数字。如果无法遇到或者已经是数组末尾,则标记为-1。文中提供了两种不同的解决方案,分别通过栈和双指针来实现,旨在优化数组操作的效率。
摘要由CSDN通过智能技术生成

给定一个整数数组,返回一个数组。该返回数组中第i个数字为,原数组中第i个位置的数字至少往右走多少步才能遇到比它大的数字。如果遇不到或者已经处于最右的位置,则置为-1。

num = int(input())
block, stack, result = [], [], []
for i in range(num):
    block.append(int(input()))
    result.append(-1)

i = 0
while (i < num):
    if (not (len(stack) == 0)) and (block[i] > block[stack[-1]]):
        print(i)
        print(stack[-1])
        cur = stack.pop()
        result[cur] = i - cur

    else:
        stack.append(i)
        i += 1

for i in range(len(result)):
    print(result[i])

 

num = int(input())
l = []
result = []
a=[]
for i in range(num):
    l.append(int(input()))

for i in range(len(l)):
    for j in range(i,len(l)):
        if l[j] > l[i]:
            result.append(j-i)
            a.append(i)
            break
print(a)
for i in range(len(l)):
    if i not in a:
        result.insert(i,-1)
for i in range(len(result)):
    print(result[i])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值