發表文章

LeetCode 解題練習:Largest Number At Least Twice of Others

題目原文描述  https://leetcode.com/problems/largest-number-at-least-twice-of-others/ 這一題主要觀念: 陣列走訪(Array Traversal) 最大值搜尋(Maximum Search) 一次掃描技巧(One Pass) 空間最佳化(Space Optimization) 屬於 LeetCode 的經典陣列入門題目。 中文描述 : 給定一個 整數陣列 nums,保證陣列中存在 唯一最大值 。請判斷這個最大值是否 至少是其他所有元素的兩倍 。若是,則回傳該最大值在陣列中的 索引 ;若否,則回傳 -1。 範例一 : Python 輸入: nums = [ 1 , 2 , 3 , 6 , 2 , 3 , 1 ] 輸出: 3 解釋:最大值是 6(位於索引 3),其他元素為 1,2,3,2,3,1,其中最大的其他元素是 3,6 >= 2*3,滿足條件。 範例二 : Python 輸入: nums = [ 1 , 2 , 3 , 4 , 6 ] 輸出: - 1 解釋:最大值是 6,但存在 4,6 < 2*4,不滿足條件。 關鍵特性 : 最大值 唯一 (不會有兩個相同最大值)。 陣列長度至少為 1。 元素可能包含 0 或負數(但最大值仍是唯一最大的)。 解法一:Two Pass(兩次遍歷) 這個解法的直覺是「分兩步走」:先找出老大是誰,再回頭檢查老大有沒有比其他人大兩倍。 核心思路 : 第一次遍歷 :找出最大值 largestNum 及其索引 largestIdx。 第二次遍歷 :檢查陣列中 每個非最大值的元素 ,是否滿足 largestNum >= 2 * n。只要有一個元素不滿足,就立刻返回 -1。 如果順利走完第二次都沒有被淘汰,說明最大值符合條件,回傳 largestIdx 。 Python Code class Solution :     def dominantIndex ( self , nums : List[ int ]) -> int :         largestNum = - 1 # 最大值     ...

Sorting Algorithm 排序演算法介紹

前言 在本部落格的文章: Python 排序演算法範例 ( Sorting Algorithms in Python ) 有介紹一些常見的四種排序演算法:插入排序、選擇排序、合併排序、氣泡排序。除了這四種之外還有其他的嗎? 當然有!!! 1. 什麼是排序演算法?(排序在做什麼) 排序(Sorting)是指將一組資料(元素)依照 特定的規則 重新排列組合。 日常生活中: 例如將考卷依分數「由低到高」排列,或是將包裹依體積「由大到小」放置。 電腦科學中: 排序是資訊處理的核心基礎。主要是將資料依照「數值大小」(如整數、浮點數)或「字典順序」(如英文字母 A~Z、中文編碼)進行排列。 2. 為什麼會有這麼多種排序演算法? 既然目的都是為了「排好資料」,為什麼科學家要發明幾十種不同的方法?主要原因在於「沒有任何一種演算法在所有情境下都是完美的」。選擇演算法時通常會考量以下關鍵因素: 資料量的大小: 有些演算法(如氣泡排序、選擇排序)程式碼非常簡單,在資料量極小(例如 10 筆資料)時效率很高;但當資料量極大(例如 100 萬筆資料)時,計算時間會暴增,這時就必須使用高效能的演算法(如快速排序、合併排序)。 時間複雜度(計算量): 評估演算法執行速度的指標。例如: 平方時間複雜度 $O(n^2)$ :資料量增加 10 倍,執行時間可能增加 100 倍(如氣泡、選擇、插入排序)。 線性對數時間複雜度 $O(n \log n)$ :效能較佳,適合處理大數據(如快速、合併、堆積排序)。 資料的實際分佈狀況: 資料是已經「幾乎排好」還是「完全混亂」? 例如: 插入排序法 在面對「幾乎已經排好」的資料時,速度非常快。 空間複雜度(記憶體佔用): 有些演算法在排序過程中需要額外的記憶體空間來暫存資料(如合併排序),在記憶體受限的嵌入式系統中就需要謹慎使用。 穩定性(Stability): 如果資料中有兩個數值相同的元素,排序後它們的相對前後順序是否會改變?這在某些商用資料處理中非常重要。 3. 常見的排序演算法分類 根據文中提及的演算法,我們可以依據其運作原理(比較式 vs 非比較式)來分類: 核心分類:比較式排序 (Comparison-based) 這類演算法是透過「兩兩比較資料的大小」來決定順序,也是最常見的類型。 基礎四種(文中提及 Python ...

使用 Gemini 製作學習單的流程

圖片
最近使用 Gemini 製作學習單的流程如下: 1. 請以資訊科技主題陣列,設計給臺灣國中八年級的10分鐘試教大綱,內容要能引起學生動機。 2. 請製作上述內容的學習單 3. 將學習單的內容製作成四格漫畫 4. 請講一個與陣列有關的笑話。 5. 請將學習單製作成word檔案與pdf檔案 6. 修改檔案。 7. 分享連結!?  https://share.gemini.google/sTZf3R55IfGA 學習單的圖片如下

Mastering Pointers in C/C++: 10 Practical Coding Exercises for Beginners

If you are diving into C or C++ programming, there is one concept you simply cannot escape: Pointers . Often considered the first major hurdle for beginners, pointers are actually incredibly powerful tools that give you direct access to memory and help you write highly efficient code. Before jumping into the exercises below, if you need a quick conceptual refresher, I highly recommend checking out some classic guides such as [Pointers in C Programming: What is Pointer, Types & Examples] or an [Introduction to C Pointers]. To help you solidifying your understanding, here are 10 practical pointer exercises , complete with reference solutions. Let's code! Exercise 1: Basic Pointer Syntax Goal: Design a C program to demonstrate the foundational syntax of pointers, including pointer declaration, address-of retrieval ( & ), and dereferencing ( * ). Reference Solution: /* Pointer Basic Syntax Author: Holan */ # include <stdio.h> # include <stdlib.h> int main () ...