iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
佛心分享-IT 人自學之術

從Leetcode到實務的橋樑系列 第 13

Day13(31. Next Permutation)

  • 分享至 

  • xImage
  •  

題目介紹:
要求在一個整數陣列中找到字典序中下一個比當前排列更大的排列,並且必須在原地修改而不使用額外空間。如果當前排列已經是最大的排列,則需要將其轉換成最小的排列(即升序排列)。這題考驗對排列字典序的理解,以及利用「找到下降點、交換、反轉」的演算法思維。
解題流程:
先從右往左找到第一個下降點,再從右側找出比它大的數字並交換,最後將下降點之後的序列反轉,得到字典序中最小的下一個排列。
程式碼及執行結果截圖:
https://ithelp.ithome.com.tw/upload/images/20250926/20168871Rnjv6YOxDz.png
學習心得:
在解這題的過程中,我學到如何用結構化的思維來解決排列問題。以前看到「下一個排列」會覺得很直觀卻難以實作,但透過分解步驟後才發現其邏輯清晰:找到下降點、交換、再反轉。這讓我體會到演算法其實就是在複雜情境中尋找規律。過程中我也注意到處理細節的重要性,特別是當整個序列已經是最大排列時,不能忘記要反轉為最小排列。這題不僅訓練了我對陣列操作的掌握度,也讓我更有信心面對需要「就地修改」的題目。
延伸邏輯時事面:
1.密碼生成與驗證:銀行系統在測試密碼安全時,可以用下一個排列生成所有可能的密碼組合,確認沒有弱密碼被忽略。

2.排程最佳化:公司安排員工輪班或會議順序時,可以利用排列演算法找出最合理的順序,減少等待或衝突。

3.數據組合搜尋與模型調參:AI 訓練中,想調整不同超參數組合(如學習率、批次大小)時,可用下一個排列生成每一組組合,快速測試模型表現。


上一篇
Day 12(Letter Combinations of a Phone Number)
系列文
從Leetcode到實務的橋樑13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言