google2016面試題-count of smaller numbers after self
這是google2016的面試題,給定一個陣列array[],返回一個計數陣列count,count[i]表示array[]中第i個元素右邊有多少個小於array[i](i>=0)
示例:
輸入:array[]=[3,6,2,1]
輸出:count[]=[2,2,1,0]
分析思路:
不難想到O(n2)的方法,不斷的用for迴圈來找目標值。難點在於如何在小於O(n2)時間複雜度下找到方法。其實像這種統計個數問題我們完全可以採用線段樹的思想來做。先給大家舉個簡單例子:
一維座標軸上我這有三條線段區間,分別為[1,5],[2,5],[4,10],請判斷點2都在哪幾條區間出現過。高時間複雜度的演算法就不寫了,直接上效果非常好的線段樹。
線段樹:和正常的樹類似,只不過每個節點儲存的是一段區間,同時每個節點新增計數變數count,用來記錄哪個數值點在該條線段區間出現過。表示建樹的過程是首先在根節點儲存最大線段區間跨度,然後採用與折半查詢類似的方式建立根節點的左右子樹。以三條線段[1,5],[2,5],[4,10]為例,其線段樹構造如下圖,初始conut為全0.
為了判斷點2都在哪些區間出現過,我們需要將三條線段掛在剛剛建立的線段樹上。線段[1,5]就要切割成[1,3],[4,5],這樣線段樹[1,3],[4,5]這兩個節點的count值要加1,表示[1,5]這條線段出現過,線段[1,5]和節點[2,3]和[4,5]是等價的。同理,線段[2,5]要切割成[2,3]和[4,5],線段樹[2,3]和[4,5]這兩個節點count值也要加1。目前為止節點[4,5]的count計數已經變為了2。同樣線段[4,10]分割為[4,5]和[6.10],對應count值要加1。這樣三條線段就掛在完畢了,只要線上段樹中用折半查詢的方式找到[2,2]這個節點,記錄下經過“掛”的節點的count值,取和就是最終經過的線段數。
明天給啦
相關文章
- Bitcoin Node Numbers Fall After Spam Transaction "Attack"
- Leetcode 1365. How Many Numbers Are Smaller Than the Current Number (cpp)LeetCode
- LeetCode- Count Numbers with Unique DigitsLeetCodeGit
- LeetCode之Sum of Even Numbers After Queries(Kotlin)LeetCodeKotlin
- [LeetCode] 2960. Count Tested Devices After Test OperationsLeetCodedev
- 每日英語:China's Red Cross Tries to Rebuild After Self-Inflicted DisasterROSRebuildAST
- [題解]CF55D Beautiful Numbers
- MySQL的COUNT語句--count(*)、 count(常量)、 count(列名)MySql
- count(0),count(1),count(*)總結與count(column)
- leetcode刷題--Compare Version NumbersLeetCode
- 【優化】COUNT(1)、COUNT(*)、COUNT(常量)、COUNT(主鍵)、COUNT(ROWID)等優化
- &self 和 self 的區別
- leetcode刷題--Count PrimesLeetCode
- leetcode刷題--Count and SayLeetCode
- [LintCode] 3Sum Smaller
- LeetCode-3Sum SmallerLeetCode
- count(1),count(*),count(列)的區別
- CF878E Numbers on the blackboard 題解
- [題解]SP10606 Balanced Numbers
- 題解:UVA13185 DPA Numbers I
- rust語法super、self和SelfRust
- self.view.frame的佈局問題View
- count(*)、count(1)和count(列名)的區別
- count (*) 和 count (1) 和 count (列名) 區別
- count(*) 和 count(1)和count(列名)區別
- 400多種Numbers模板 DesiGN for Numbers Templates for macMac
- LeetCode 259. Three Sum SmallerLeetCode
- object-c [self class] 和 [self _cmd]Object
- 實驗:cursor count超高的問題分析
- P2633 Count on a tree 題解
- Archived redolog is (significant) smaller than the redologfileHiveNifi
- 圖解MySQL:count(*) 、count(1) 、count(主鍵欄位)、count(欄位)哪個效能最好?圖解MySql
- Codeforces - Jzzhu and Numbers
- different random numbers generatorrandom
- Collecting Numbers II
- count(*) 和count(column)之區別
- new static ,new self ,self::, $this的一些理解
- GOLANG中time.After釋放的問題Golang