發表文章

LeetCode 解題練習:Remove Element

圖片
題目原文描述  https://leetcode.com/problems/remove-element/ 中文描述 給定一個整數陣列 nums 與一個整數 val,將 nums 中的所有 val 給移除,並回傳 nums 中不等於 val 的個數k有多少個。 範例一: 輸入 nums = [1, 1, 2, 5, 3, 1, 4], val = 1 輸出 k = 4, nums [2, 5, 3, 4, x, x, x] 因為 nums 不等於 1 的總共有 4 個。 範例二: 輸入 nums = [1, 1, 2, 2, 5, 3, 1, 4], val = 2 輸出 k = 5, nums [1, 1, 5, 3, 1, 4, x, x] 因為 nums 不等於 2 的總共有 5 個。 解法一: 用 Python List 的內建函式 remove。 Python Code class Solution :     def removeElement ( self , nums : List[ int ], val : int ) -> int :         while val in nums:             nums.remove(val)                 return len (nums) 解法二: 將變數 k 設為 0,用來判斷 nums 內有幾個元素是不等於 val。 若陣列元素不等於 val,就將 k 當成 nums 的索引,並更新元素的值。 可參考底下圖片動畫說明 Python Code class Solution :     def removeElement ( self , nums : List[ int ], val : int ) -> int :         k = 0             for n in nums:   ...

LeetCode 解題練習:Merge Sorted Array

圖片
題目原文描述  https://leetcode.com/problems/merge-sorted-array/   中文描述 給定兩個由小排到大的陣列 nums1, nums2,以及兩個整數m, n 分別來表示陣列 nums1 與 nums2 的元素有多少個。請將 nums1與 nums2 合併成新的由小排到大之陣列。請將此陣列存到 nums1 裡,因此 nums1 長度為 m + n,其中最後 n 個元素都是 0。 範例一: 輸入 nums1 = [1, 3, 5, 7, 0, 0, 0], m = 4, nums2 = [2, 4, 6], n = 3  輸出 [1, 2, 3, 4, 5, 6, 7] 範例二: 輸入 nums1 = [1, 3, 5, 7], m = 4, nums2 = [], n = 0  輸出 [1, 3, 5, 7] 範例三: 輸入 nums1 = [], m = 0, nums2 = [2, 4, 6], n = 3  輸出 [2, 4, 6] 解法: 比較兩陣列最右邊的元素nums1[a] 與 nums2[b],merged 的最右邊元素merged[w]設定為較大的那一個。請參考下圖動畫: Python Code class Solution :     def merge ( self , nums1 : List[ int ], m : int , nums2 : List[ int ], n : int ) -> None :         """         Do not return anything, modify nums1 in-place instead.         """         w, a, b = m + n - 1 , m - 1 , n - 1         while b >= 0 :             if a >= 0...

LeetCode 解題練習:Swap Nodes in Pairs

圖片
題目原文描述  https://leetcode.com/problems/swap-nodes-in-pairs/ 中文描述 給定一個鏈結串列(linked list),將兩個相鄰節點交換後回傳開頭的節點。注意不得修改節點內的值。 範例一: 輸入 head = [1, 3, 5, 7] 輸出 [3, 1, 7, 5] 解法: 用一個變數 t 作為交換相鄰兩個節點的暫時替代空間,用來交換第一個節點 head 與 第二個節點head.next 。依照下列步驟來交換相鄰的兩個節點: t 先設定為 head.next。  head.next 設定為 swap(t.next)。 t.next 設定為 head。 Python Code # Definition for singly-linked list. # class ListNode: #     def __init__(self, val=0, next=None): #         self.val = val #         self.next = next class Solution :     def swapPairs ( self , head : Optional[ListNode]) -> Optional[ListNode]:         if head == None or head.next == None : # 目前節點或下一個節點為 None             return head # 傳回 head         t = head.next # 節點 t 指向目前的相鄰的第二個節點         head.next = self .swapPairs(t.next) # 目前節點指向下一組交換完的第一個節點         t.next = head # 節點 t 指向目前的相鄰的第一個節...

LeetCode 解題練習:Reverse String

圖片
題目原文描述  https://leetcode.com/problems/reverse-string/ 中文描述 給定一個字元陣列 s  ,撰寫一個函式來反轉此字串。 注意請修改此陣列來完成程式碼。 範例一: 輸入 s = [ "a", "b", "c", "d", "e"]  輸出 ["e", "d", "c", "b", "a"] 範例二: 輸入 s = [ "G", "o", "o", "d", "s"]  輸出 ["s", "d", "o", "o", "G"] 解法: 使用兩個指標 left 與 right 分別表示陣列的頭與尾,從最左邊與最右邊依序互換。 Python Code class Solution :     def reverseString ( self , s : List[ str ]) -> None :         """         Do not return anything, modify s in-place instead.         """         left = 0         right = len (s) - 1         while left <= right:             s[left], s[right] = s[right], s[left]             left += 1             right -= 1         C++ Code class Solution { public:     void reverseString ( vector < char > ...

線上程式競賽懶人包

2026.06.25 更新 底下為筆者所整理的線上程式競賽活動: 國內 高中生解題系統   https://zerojudge.tw/ 特色: 台灣使用人數最多的 OJ 平台 收錄 APCS、TOI、NPSC、UVa 題目 支援 C、C++、Java、Python 題目數量超過數千題 適合從零開始學習程式設計與競賽訓練 推薦程度:★★★★★ 一中電腦資訊研究社解題系統  https://judge.tcirc.tw/ 特色: 支援超過 50 種程式語言 收錄 AP325 題庫 新手介面友善 適合 APCS 與校內競賽訓練 推薦程度:★★★★☆ 建國中學解題系統  https://tioj.ck.tp.edu.tw/ 特色: 台灣資訊奧林匹亞(TOI)常用平台 題目偏向演算法與資料結構 適合培養國手選拔實力 比 ZeroJudge 更具挑戰性 推薦程度:★★★★★ 「AI 程式煉鋒吧」 https://adl.edu.tw/ForgeInCoding 特色 AI 提示系統 :結合 GPT 大型語言模型,在學生卡關時給予引導與撰寫方向提示。 多元程式語言 :平台主要支援 C、C++、Python 等主流檢定語言。 檢定實戰題庫 :內建齊全的 APCS(大學程式設計先修檢測) 實戰題庫與自學課程。 定期解題活動 :提供每週解題挑戰與每日一題,讓練習融入日常生活。 教師教學後台 :老師免註冊即可透過因材網帳號快速登入,能運用已有教材生成專屬題目,並追蹤學生的學習成效。 推薦程度:★★★★★ 景美女中程式解題系統 https://jmj.cmgsh.tp.edu.tw/ 建國中學解題系統  https://tioj.ck.tp.edu.tw/ 資訊之芽解題系統  https://neoj.sprout.tw/ 大學程式能力檢定  https://cpe.cse.nsysu.edu.tw/ 程式設計新手可以先從一中電腦資訊研究社解題系統基礎題庫 https://judge.tcirc.tw/Problems?tabid=BASIC#tab01 或是景美女中程式解題系統高一資訊科技題庫 https://jmj.cmgsh.tp.edu.tw/Problems?...

LeetCode 解題練習:Duplicate Zeros

題目原文描述  https://leetcode.com/problems/duplicate-zeros/ 中文描述 給定一個固定長度的陣列 arr,複製每一個數字零,將剩下的陣列元素往右移。 範例一: 輸入 arr = [1, 0, 2, 0, 0, 5] 輸出 [1, 0, 0, 2, 0, 0] 因為  複製零後的結果會為 [1, 0, 0, 2, 0, 0, 0, 0, 5 ],但因為原本的陣列長度為 6 ,所以只有前六個元素會保留 [1, 0, 0, 2, 0, 0] 範例二: 輸入 arr = [1, 2, 5] 輸出 [1, 2, 5] 解法一: 若陣列中有零出現,將之後的所有陣列元素往右移。 Python Code class Solution :     def duplicateZeros ( self , arr : List[ int ]) -> None :         """         Do not return anything, modify arr in-place instead.         """         left = 0         arrLen = len (arr)         while left < arrLen:             if arr[left] == 0 : # 有零出現,將之後的所有陣列元素往右移。                 for right in range (arrLen - 1 , left, - 1 ): # 從陣列右邊開始複製                     arr[right] = arr[right -...

LeetCode 解題練習:Squares of a Sorted Array

圖片
題目原文描述  https://leetcode.com/problems/squares-of-a-sorted-array/ 中文描述 給定一個由小排到大的整數陣列 nums ,算出每個數字的平方,並由小排到大排序。 限制條件: 1 <= nums.length <= 10000 -10000 <= nums[i] <= 10000 範例一: 輸入 nums = [-4, -1, 0, 2, 3] 輸出 [0, 1, 4, 9, 16] 平方後 [16, 1, 0, 4, 9],排序後 [0, 1, 4, 9, 16] 解法一: 算出每個數字平方後,再做排序。 Python Code class Solution :     def sortedSquares ( self , nums : List[ int ]) -> List[ int ]:         for i in range ( len (nums)):             nums[i] = nums[i] * nums[i]                 return sorted (nums) 解法二: 用兩個指標 left 與 right 分別指到陣列的開頭索引 0 與結束索引 len(nums) - 1。 maxIdx 為目前找到的最大值之索引位置。可參考底下動畫圖片 Python Code class Solution :     def sortedSquares ( self , nums : List[ int ]) -> List[ int ]:         res = [ 0 ] * len (nums) # 存放結果的陣列         right = len (nums) - 1 # 陣列結束索引         left = 0 # 陣列開頭索引  ...