【GO語言學習】每日一題:根據身高重建佇列
題目描述
假設有打亂順序的一群人站成一個佇列。 每個人由一個整數對 (h, k)
表示,其中 h
是這個人的身高,k
是應該排在這個人前面且身高大於或等於 h
的人數。 例如:[5,2]
表示前面應該有2
個身高大於等於 5
的人,而 [5,0]
表示前面不應該存在身高大於等於 5
的人。
編寫一個演算法,根據每個人的身高 h
重建這個佇列,使之滿足每個整數對 (h, k)
中對人數 k 的要求
示列:
輸入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
輸出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
解題思路
首先對陣列進行排序,第一個元素從高到低,如果第一個元素相同,第二個元素從高到底。即高個子先站前面,低個子再根據切片第二個值來插入到正確的位置。
接著進行如下操作來將低個子插入正確位置
程式碼展示
type S [][]int
func sortS(s S){
sort.Sort(s)
}
func (s S)Swap(i,j int) {
s[i],s[j]=s[j],s[i]
}
func (s S)Len() int{
return len(s)
}
func (s S)Less(i,j int) bool{
// 高的人先排,同樣高的k值小的在前面
return s[i][0]>s[j][0] || (s[i][0]==s[j][0] && s[i][1]<s[j][1])
}
func reconstructQueue(people [][]int) [][]int {
var res [][]int
sortS(people)//先排序
for key,value:=range people {
if value[1]<key {
//插入index位置
index:=value[1]
temp:=append([][]int{},res[index:]...)
res=append(res[0:index],value)
res=append(res,temp...)
}else{
res=append(res,value)//直接插入res尾部
}
}
return res
}
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/queue-reconstruction-by-height
相關文章
- 根據身高計算體重
- go語言學習-陣列-切片-mapGo陣列
- Go語言面試題分享:選擇題10道(3)go語言學習Go面試題
- Go語言面試題分享:選擇題10道(1)go語言學習Go面試題
- go語言學習Go
- go語言面試選擇題11道(4)go語言深入學習Go面試
- Go語言學習——mapGo
- go語言學習-介面Go
- go語言學習-goroutineGo
- Go 語言學習筆記之陣列與切片Go筆記陣列
- Go 語言學習腦圖Go
- go 語言指標學習Go指標
- GO語言學習——切片二Go
- Go語言學習(2) - HelloWorldGo
- go語言學習-函式Go函式
- Go語言核心36講(Go語言進階技術一)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識一)--學習筆記Go筆記
- C語言 簡單的佇列(陣列佇列)C語言佇列陣列
- Go語言核心36講(Go語言實戰與應用一)--學習筆記Go筆記
- go 語言陣列Go陣列
- GO語言學習筆記之mac環境go語言配置Go筆記Mac
- go 學習筆記之初識 go 語言Go筆記
- go開發面試題分享:判斷題13道(5)go語言學習Go面試題
- 如何開始學習Go語言Go
- Go語言學習(1) - 簡介Go
- Go 語言學習路線指南Go
- Go語言學習(7) - 運算子Go
- 函式 -- 就要學習 Go 語言函式Go
- go語言學習-結構體Go結構體
- go語言學習初體驗Go
- Go語言運算元據庫Go
- 程式碼隨想錄演算法訓練營 | 134. 加油站,135. 分發糖果,860.檸檬水找零,406.根據身高重建佇列演算法佇列
- 非懂不可的Slice(一)-- 就要學習Go語言Go
- go語言學習筆記(一):*和&的區別Go筆記
- 【Go】Go語言學習筆記-3-包Go筆記
- 徹底學會 Go 指標 -- 就要學習 Go 語言Go指標
- [每日一題] 第七題:用兩個棧實現佇列每日一題佇列
- Go 語言學習路線來啦Go