Arrays 对于数组中的每个数字,从其左侧查找第一个较小的数字

Arrays 对于数组中的每个数字,从其左侧查找第一个较小的数字,arrays,algorithm,time-complexity,Arrays,Algorithm,Time Complexity,我已经思考这个问题好几个小时了,到目前为止,我的每一个想法都不好 执行此操作的函数接收原始数组和需要填充的空数组 如果某个对象没有这样的索引,那么应该插入-1 例如,对于数组:[4,6,8,1,7,10,15,9,11],数组[-1,0,1,-1,3,4,5,4,7]应该返回,因为例如,如果我们查看原始数组中的9,它左边第一个较小的数字是7,7的索引是4。因此,应该在新数组中填充4,而不是原始数组中的9 如果原始数组的大小为n,则时间复杂度为O(n),空间复杂度也为O(n) 您只能使用数组或列表

我已经思考这个问题好几个小时了,到目前为止,我的每一个想法都不好

执行此操作的函数接收原始数组和需要填充的空数组

如果某个对象没有这样的索引,那么应该插入-1

例如,对于数组:[4,6,8,1,7,10,15,9,11],数组[-1,0,1,-1,3,4,5,4,7]应该返回,因为例如,如果我们查看原始数组中的9,它左边第一个较小的数字是7,7的索引是4。因此,应该在新数组中填充4,而不是原始数组中的9

如果原始数组的大小为n,则时间复杂度为O(n),空间复杂度也为O(n)

您只能使用数组或列表来获取帮助,而不能使用其他结构

以下是我到目前为止收集到的信息: 1.对数组进行排序,而显式执行此操作的解决方案还不够好

  • 如果我们开始从左到右观察数组,一旦我们发现一个比其他数字小的数字,“其他”数字就可以扔掉。我相信这是最重要的事情,但我无法使用它

  • 将原始数组划分为已排序的小数组没有帮助

  • 制作堆栈(基于数组或列表:))。它将保留候选元素的索引

    遍历源数组

    若当前元素大于栈顶寻址的元素,则将栈顶复制到输出数组中,并将当前索引推送到栈上

    若栈顶寻址的元素较大,则弹出堆栈,直到找到较小的元素为止

    我忽略了一些你自己需要了解的时刻


    请注意,堆栈每时每刻都包含递增顺序的索引。

    我不理解下行投票。我没有一个能让我开始的想法,因此我请求帮助,问题已经说得很清楚了。我不是投反对票的人,但一般来说,为了让人们帮助你,你需要展示你已经尝试过的东西。我有一个非常类似的想法,但没有注意到这会足够好。非常感谢。