题解 | 线段重合

线段重合

https://www.nowcoder.com/practice/1ae8d0b6bb4e4bcdbf64ec491f63fc37

package main

import (
	"container/heap"
	"fmt"
	"sort"
)

type pair [2]int
type pairList []pair
type pairHeap []pair

func (p pairList) Len() int           { return len(p) }
func (p pairList) Less(i, j int) bool { return p[i][0] < p[j][0] }
func (p pairList) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }

func (p pairHeap) Len() int           { return len(p) }
func (p pairHeap) Less(i, j int) bool { return p[i][1] < p[j][1] }
func (p pairHeap) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }

func (p *pairHeap) Push(x interface{}) { (*p) = append(*p, x.(pair)) }
func (p *pairHeap) Pop() interface{} {
	x := (*p)[len(*p)-1]
	(*p) = (*p)[:len(*p)-1]
	return x
}

func main() {
	a := 0
	b := 0
	n := 0
	fmt.Scan(&n)
	var arr pairList = make([]pair, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&a, &b)
		arr[i] = pair{a, b}
	}
	sort.Sort(arr)
	var hp pairHeap
    var res []int = make([]int, n)
    for i, a := range arr {
        for len(hp) >0 && hp[0][1] <= a[0]{
            heap.Pop(&hp)
        }
        heap.Push(&hp, a)
        res[i] = len(hp)
    }
    var max = res[0]
    for _,r := range res{
        if r>max{
            max = r
        }
    }
    fmt.Print(max)
}

全部评论

相关推荐

秋招投简历提醒助手:个人经验是,一般面二十场左右就会进入侃侃而谈阶段。我今年七月末的时候开始的第一次面试,都是很多不会,回复很慢。后面慢慢迭代,到九月中的时候基本上面啥说啥,很放松的状态
远程面试的尴尬瞬间
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务