2021-03-03:一些項目要佔用一個會議室宣講,會議室不能同時容納兩個項目的宣講。給你每個項目

2021-03-03:一些項目要佔用一個會議室宣講,會議室不能同時容納兩個項目的宣講。給你每個項目開始的時間和結束的時間 。你來安排宣講的日程,要求會議室進行的宣講的場次最多。 返回最多的宣講場次。 java

福哥答案2021-03-03:git

貪心算法。
1.按結束時間排序。
2.for循環中,當前時間點小於會議的開始時間點,須要計數。當前時間點變成會議的結束時間點。github

代碼用golang編寫,代碼以下:golang

package main

import (
    "fmt"
    "sort"
)

func main() {
    programs := make([]*Program, 3)
    programs[0] = &Program{1, 27}
    programs[1] = &Program{26, 31}
    programs[2] = &Program{29, 300}
    ret := bestArrange(programs)
    fmt.Println(ret)
}

// 會議的開始時間和結束時間,都是數值,不會 < 0
func bestArrange(programs []*Program) int {
    //按會議的結束時間排序
    sort.SliceIsSorted(programs, func(i, j int) bool {
        return programs[i].end < programs[j].end
    })
    programsLen := len(programs)
    timeLine := 0
    result := 0
    // 依次遍歷每個會議,結束時間早的會議先遍歷
    for i := 0; i < programsLen; i++ {
        if timeLine <= programs[i].start {
            result++
            timeLine = programs[i].end
        }
    }
    return result
}

type Program struct {
    start int
    end   int
}

執行結果以下:
圖片算法


左神代碼以下
評論ide

相關文章
相關標籤/搜索