得到前i-1个数中比A[i]小的最大值,使用set,然后二分查找
題目
有一個(gè)長度為 n 的序列 A,A[i] 表示序列中第 i 個(gè)數(shù)(1<=i<=n)。她定義序列中第 i 個(gè)數(shù)的 prev[i] 值 為前 i-1 個(gè)數(shù)中比 A[i] 小的最大的值,即滿足 1<=j<i 且 A[j]<A[i] 中最大的 A[j],若不存在這樣的數(shù),則 prev[i] 的值為 0。
思路
很顯然,使用雙for循環(huán)的復(fù)雜度為O(n^2);
偽代碼如下:
此時(shí)可以借助二叉搜索樹來完成這個(gè)任務(wù),這樣復(fù)雜度就是O(nlogn)了,由于容器set的底層是紅黑樹,我們可以直接使用。
這里介紹一下set的api:lower_bound();
lower_bound() 函數(shù)用于在有序區(qū)間內(nèi)查找大于等于目標(biāo)值的第一個(gè)元素。也就是說,使用該函數(shù)在指定范圍內(nèi)查找某個(gè)目標(biāo)值時(shí),最終查找到的不一定是和目標(biāo)值相等的元素,還可能是比目標(biāo)值大的元素。
但是返回的迭代器的前一個(gè)迭代器則是小于等于目標(biāo)值的最后一個(gè)元素,這一點(diǎn)和前i-1個(gè)數(shù)中比A[i]小的最大值就不謀而合了。
代碼如下:
總結(jié)
以上是生活随笔為你收集整理的得到前i-1个数中比A[i]小的最大值,使用set,然后二分查找的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《原神》寻星之旅DAY3未来星在哪里呢
- 下一篇: gp的分布、分区策略(概述)