Hero Image
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] 這個位置又讓陣列發生了遞減情況,所以至少要改兩個地方,這樣絕對達不到題目要求,因此我們可以提早結束判斷、回傳失敗結果。

Hero Image
Raspberry Pi 透過 Serial Port 連線 - 踩雷筆記

最近因為想要從 serial port 登入樹梅派而入手了一個 USB 轉 TTL 傳輸線,沒想到設定過程踩了不少雷,故寫了這篇作為提醒用。 我是從電子材料行買的,型號為CONCBLUSBTTL,使用 PL2303TA 晶片 理論上 win10 可以自動抓可以用的驅動,不需要特別下載。但如果有問題的話還是可以從晶片製造商的驅動程式下載頁面下載最新的驅動。解壓縮後除了驅動程式外還有一個小程式可以用來檢查晶片型號。 這裡遇到我採的第一個雷 (自己雷):在我一開始無法順利設定時,經爬文得知,由於舊款晶片 (PL2303HX 系列) 有偽造情形,故 win10 自動抓的驅動並不支援該款晶片的產品,需要下載舊版驅動才行,我還以為自己真幸運在 2021 還買得到舊款晶片,大費周章跑去前人的 blog 載舊版驅動,結果還是不行;又因為在舊版驅動下跑上面原廠提供的晶片型號檢查程式會將我的傳輸線誤判為 PL2303XA/PL2303HXA 害我誤以為自己真的買到 PL2303HX 晶片,一直往錯誤的方向 google。後來完全解決不了,改用新版驅動再測最後一次,想說不行就要放棄這條線了,才發現原來都是驅動搞的鬼。 這裡提醒一下接線的注意事項,傳輸線和樹梅派的 TX/RX 要反著接,也就是 線的 TX 要接到 Pi 的 RX,線的 RX 要接到 Pi 的 TX。GND 當然也要記得接。我這條線還有一個 5V 線,接上去後可以為 Pi 供電並開機,不過看其他人文章表示不一定要接這條線,而且我怕 GPIO 的供電不穩 (我用的是 pi 4, pi 4 在供電不足的情況下 wifi 會無法連線,就算能順利連上品質也不好,所以供電一定要足) 所以就沒接了。 解決完驅動問題接下來就剩連線設定了,這裡是第二個要注意的地方,所有參數都要設定正確不然就會連不上!像是 speed,網路上的教學大都多是教人設定為 115200,但我的這條線,在裝置管理員的預設值為 9600,所以連線時要設 9600;還有 flow control 不論是 putty 或是 MobaXterm 預設都會是 Xon/Xoff,同樣與這條線的預設值不符,要記得關掉。