72 合并区间
力扣https://leetcode-cn.com/problems/SsGoHC/
func merge(intervals [][]int) [][]int {
sort.Slice(intervals,func(i, j int) bool {
return intervals[i][0] < intervals[j][0]
})
var res [][]int
arrmap:=make(map[int][]int)
var lastsatrt,lastend int
lastend = -1
for i:=0;i<len(intervals);i++{
if intervals[i][0]<=lastend {
//该区间与上一个区间有所重复
if intervals[i][1] > lastend{
arrmap[lastsatrt][1] = intervals[i][1]
lastend = intervals[i][1]
}
}else{
//全新的一个不重复区间
lastsatrt = intervals[i][0]
lastend = intervals[i][1]
arrmap[lastsatrt] = intervals[i]
}
}
for _,v:=range arrmap{
res = append(res,v)
}
sort.Slice(res,func(i, j int) bool {
return res[i][0] < res[j][0]
})
return res
}
73 数组相对排序
func relativeSortArray(arr1 []int, arr2 []int) []int {
arrmap:=make(map[int][]int)
for i:=0;i<len(arr1);i++{
arrmap[arr1[i]] = append(arrmap[arr1[i]],arr1[i])
}
var res []int
for i:=0;i<len(arr2);i++{
res = append(res,arrmap[arr2[i]]...)
delete(arrmap,arr2[i])
}
sort.Ints(arr1)
for i:=0;i<len(arr1);i++{
if arrmap[arr1[i]]!=nil{
res = append(res,arrmap[arr1[i]]...)
delete(arrmap,arr1[i])
}
}
return res
}
74 数组中的第 k 大的数字
力扣https://leetcode-cn.com/problems/xx4gT2/
func findKthLargest(nums []int, k int) int {
n := len(nums)
x := rand.Intn(n)
nums[x], nums[n-1] = nums[n-1], nums[x]
l := 0
r := n - 1
for l < r {
for l < r && nums[l] >= nums[n-1] {
l++
}
for l < r && nums[n-1] >= nums[r] {
r--
}
if l < r {
nums[l], nums[r] = nums[r], nums[l]
}
}
if r == k-1 {
return nums[n-1]
} else if r < k-1 {
nums[r], nums[n-1] = nums[n-1], nums[r]
return findKthLargest(nums[r+1:], k-(r+1))
} else {
return findKthLargest(nums[:r], k)
}
}