Author Image

Hi, I am Jay

Jay Lin

工程師

畢業於國立交通大學網路工程研究所碩士班,碩士班主要工作為 5G 核心網路開發,為 free5GC 開發團隊的一員,主要負責開發 AMF (Access and Mobility Management Function);熟悉 3GPP R15 中與移動管理功能相關之標準文件,了解 NGAP, NAS 等協定及 R15 之 SBA 架構;目前為韌體工程師菜雞一枚。

領導力
團隊合作

技能

參與過專案

free5GC
free5GC
Developer 2019/06 - 2021/01

An Open Source 5G core network based on 3GPP R15.

學歷

網路工程研究所 碩士班
資訊工程學系 學士

最近文章

Card image cap
Leetcode 隨筆 - 665. Non-decreasing Array

題目難度:Medium 題目連結: Non-decreasing Array 題目大綱 給你一個陣列 nums,請你檢查是否可以在 “最多修改一個元素的值” 的限制下,把這個陣列變成一個非遞減陣列 (原來就已經是非遞減陣列也可以算通過檢查) 非遞減定義: nums[i] <= nums[i+1], where 0 <= i <= nums.size()-2 解題思路 首先需要把陣列從頭開始掃描一遍,遇到 nums[i+1] < nums[i] 時停下來檢查是否可以修改元素值來完成題目要求,如果可以改,那就紀錄本次修改。所以我們可以用一個 counter 來記錄修改次數,而若修改次數大於 1 次就可以提前結束不用再往後檢查了。 接下來重點就是:要怎麼確認可以修改(改成非遞減)? 這裡可以分成幾個 case 來討論: Case 1. 陣列的開頭 or 結尾發生遞減情況 也就是 nums[0] > nums[1] or nums[nums.size()-1] > nums[nums.size()-2],這時候一定可以修改,因為只要把陣列頭的值往下修或把陣列尾的值往上調就可以了,所以直接更新 counter (counter++) 即可。 Case 2. 陣列中間發生遞減情況 這時候發生了 nums[i+1] < nums[i],為了判斷是否能夠只改一個值就能改成非遞減陣列,我們必須額外再抓出 nums[i-1] & nums[i+2] 這兩個元素來幫助我們判斷。 首先第一項檢查 nums[i+2] 是否大於等於 nums[i-1] ? 因為若這個條件不符合,代表除了 nums[i] 跟 nums[i+1] 之外,在 nums[i+2] 這個位置又讓陣列發生了遞減情況,所以至少要改兩個地方,這樣絕對達不到題目要求,因此我們可以提早結束判斷、回傳失敗結果。