Code n Golang 的出現:切片和切塊報告
介紹
所以,這是 Golang 2024 年程式碼來臨的第二天,我們將探索我的方法和解決方案。問題沒那麼容易,但實施後發現很簡單,並發現正確。
您可以在 GitHub 上查看我的解決方案。
破壞先生
/
代碼出現
代碼的出現
第 1 部分
我們得到了一些稱為報告的行,每個報告都有許多層級。報告的要求是必須嚴格增加或減少至少1倍或最多3倍。
這意味著如果前兩個元素增加了1,那麼該報告中的其他後續元素也應該增加(增加1、2 或3)級別,並且不能有任何變化(即兩個相鄰元素的變化為0)數字,或兩個相鄰數字不能相同)
7 6 4 2 1 1 2 7 8 9 9 7 6 2 1 1 3 2 4 5 8 6 4 4 1 1 3 6 7 9
我們首先進行輸入解析,這非常簡單,我們需要將其除以n 以獲得單獨的報告,這將是一個字符串,所以”7 6 4 2 1” ,我們想要得到一個切片整數。
所以我們繼續並用空格/空白“”分割以獲得各個級別(數字),我們需要將它們轉換為整數。
-
一旦我們有了報告的各個字串,即層級為 [“7”, “6”, “4”, “2”, “1”] ,我們需要將它們轉換為整數。
我們迭代它們中的每一個並將它們轉換為整數並附加到列表中。
建立清單後,我們將其追加到報告清單中,該清單將是數組的數組,即每一行都是一個報告,每個報告都有許多級別,因此是整數切片。
func SplitLevels(lines []string) [][]int { reportLevels := [][]int{} for i, reportLine := range lines { reportLevels = append(reportLevels, []int{}) for _, levelStr := range strings.Split(reportLine, " ") { level, err := strconv.Atoi(levelStr) if err != nil { log.Fatal(err) } reportLevels[i] = append(reportLevels[i], level) } } return reportLevels }
一旦我們建立了報告和級別,我們就會繼續實際分析各個報告中級別內的模式。
為此:
我們首先取得單獨的報告,計算前兩個元素之間的差異,並記住在這裡小心使用絕對差異。
-
我們需要維護一個標誌,指示報告中的等級是增加還是減少,這可以透過前兩個元素來確定。
也就是說,如果前兩個元素增加,則後續等級也應增加,如果它們減少,則所有等級也應減少
我們先進行警衛檢查,如果它們之間的差異是 0 或大於 3 或小於 -3,這是安全等級的條件。如果是這種情況,那麼我們回傳 false,即報告不安全。
我們現在在前兩個元素之後迭代報告,然後計算接下來兩個層級之間的差異,如果標誌正在增加為true 並且當前差異小於或等於0 或超過3 我們也將其標記為false
另一個條件是,如果標誌正在減少,這意味著前兩個元素具有負差,因此我們檢查當前差是否大於或等於0 或小於- 3,如果是這種情況,我們將其標記為false
計算完所有等級的差異後,如果我們退出循環,我們將返回 true,因為我們沒有看到等級中存在任何差異。
7 6 4 2 1 1 2 7 8 9 9 7 6 2 1 1 3 2 4 5 8 6 4 4 1 1 3 6 7 9
第2部分
對於第二部分,我們需要做一些事情,我們需要計算報告是否安全,如果不安全,我們幾乎可以從報告中刪除一個元素以使其安全。
為此,方法是:
取得我們第一次看到等級差異的索引
透過從報告中刪除該元素進行檢查,如果這使報告安全,則傳回 true,即我們找到了安全報告
如果我們仍然發現報告不安全,請刪除發現差異的索引之前的元素,如果現在我們在刪除該元素後發現它是安全的,則將其標記為安全
如果我們仍然發現報告不安全,則刪除我們最初發現差異的索引後面的元素,如果報告變得安全,我們將該報告標記為安全
否則我們會將報告標記為不安全,因為我們無法找到使報告安全的可移動元素。
func SplitLevels(lines []string) [][]int { reportLevels := [][]int{} for i, reportLine := range lines { reportLevels = append(reportLevels, []int{}) for _, levelStr := range strings.Split(reportLine, " ") { level, err := strconv.Atoi(levelStr) if err != nil { log.Fatal(err) } reportLevels[i] = append(reportLevels[i], level) } } return reportLevels }
您可以在 GitHub 上查看我的解決方案。
破壞先生
/
代碼出現
代碼的出現
結論
這就是它,這是 Golang 代碼 2024 出現的第二天的一個非常簡單的問題。我希望您喜歡 Golang 2024 年代碼降臨中第一天謎題的演練。
如果您有任何其他有趣的解決方案,或您對此有什麼要分享的,歡迎任何回饋、問題或建議。
謝謝您的閱讀,明天第三天見
快樂編碼:)
以上是Code n Golang 的出現:切片和切塊報告的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

Golang在並發性上優於C ,而C 在原始速度上優於Golang。 1)Golang通過goroutine和channel實現高效並發,適合處理大量並發任務。 2)C 通過編譯器優化和標準庫,提供接近硬件的高性能,適合需要極致優化的應用。

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。Golang以其并发模型和高效性能著称,Python则以简洁语法和丰富库生态系统著称。

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

goimpactsdevelopmentpositationality throughspeed,效率和模擬性。 1)速度:gocompilesquicklyandrunseff,IdealforlargeProjects.2)效率:效率:ITScomprehenSevestAndardArdardArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增強的Depleflovelmentimency.3)簡單性。

Golang和C 在性能競賽中的表現各有優勢:1)Golang適合高並發和快速開發,2)C 提供更高性能和細粒度控制。選擇應基於項目需求和團隊技術棧。

C 更適合需要直接控制硬件資源和高性能優化的場景,而Golang更適合需要快速開發和高並發處理的場景。 1.C 的優勢在於其接近硬件的特性和高度的優化能力,適合遊戲開發等高性能需求。 2.Golang的優勢在於其簡潔的語法和天然的並發支持,適合高並發服務開發。

Golang和C 在性能上的差異主要體現在內存管理、編譯優化和運行時效率等方面。 1)Golang的垃圾回收機制方便但可能影響性能,2)C 的手動內存管理和編譯器優化在遞歸計算中表現更為高效。
