Go語言程式用於查詢在沒有衝突的情況下可以安排的最大課程數量


在這篇 Go 語言文章中,我們將找到可以安排的最大課程數量,前提是有一系列表示課程的區間。這裡我們將使用切片函式來執行此任務。以下演算法將幫助您理解建立 Go 語言程式所採取的步驟。

演算法

  • 步驟 1 − 首先,我們需要匯入 fmt 和 sort 包。

  • 步驟 2 − 然後,建立一個名為 interval 的結構體,並在其中儲存開始和結束變數。

  • 步驟 3 − 現在,開始 main() 函式。在 main() 函式內部,初始化結構體並向其中儲存值。使用 sort 包中提供的切片函式對給定的切片進行排序。

  • 步驟 4 − 按升序對區間列表的結束時間進行排序。將最大課程數量初始化為 0。

  • 步驟 5 − 將最後一個安排課程的結束時間初始化為 0。迴圈遍歷已排序的區間,並儘可能安排更多課程。

  • 步驟 6 − 如果當前區間的開始時間大於或等於最後一個安排課程的結束時間,則安排當前區間並更新最大課程數量和最後一個安排課程的結束時間。

  • 步驟 7 − 返回已安排的最大課程數量。

示例

在下面的示例中,我們將首先定義表示課程的區間列表。然後按升序對區間結束時間進行排序,以便較早結束的區間優先安排。它將最大課程數量初始化為 0,並將最後一個安排課程的結束時間初始化為 0。然後,它迴圈遍歷已排序的區間,並透過檢查當前區間的開始時間是否大於或等於最後一個安排課程的結束時間來儘可能安排更多課程。

package main

import (
   "fmt"
   "sort"
)

type interval struct {
   start int
   end   int
}

func main() {
   // Define the list of intervals
   intervals := []interval{
      {start: 10, end: 12},
      {start: 8, end: 10},
      {start: 14, end: 16},
      {start: 13, end: 15},
      {start: 12, end: 14},
   }
   fmt.Println("The given intervals are:", intervals)
   
   // Sort the intervals by their end times in ascending order
   sort.Slice(intervals, func(i, j int) bool {
      return intervals[i].end < intervals[j].end
   })

   // Initialize the maximum number of classes to 0
   maxClasses := 0

   // Initialize the end time of the last scheduled class to 0
   lastEndTime := 0

   // Loop through the sorted intervals and schedule as many classes as possible
   for _, interval := range intervals {
      if interval.start >= lastEndTime {
         maxClasses++
         lastEndTime = interval.end
      }
   }

   // Print the result
   fmt.Printf("Maximum number of classes that can be scheduled: %d\n", maxClasses)
}

輸出

The given intervals are: [{10 12} {8 10} {14 16} {13 15} {12 14}]
Maximum number of classes that can be scheduled: 4

結論

總之,我們討論瞭如何在給定表示課程的區間列表的情況下,找到可以安排的最大課程數量,而不會發生衝突。我們提供了 Go 語言的解決方案,該方案按升序對區間結束時間進行排序,並使用簡單的貪心演算法來安排儘可能多的課程,而不會發生衝突。該演算法的時間複雜度為 O(nlogn),其中 n 是區間的數量。此問題可以應用於各種現實場景,例如安排預約、會議或活動。

更新於: 2023年4月5日

68 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.