找出重複數字| Medium | LeetCode#287. Find the Duplicate Number
題目敘述
題目難度: medium
題目敘述: 題目給定一個整數陣列 nums 包含了 n+1 個數字,每個數字範圍為 [1,n] ,在 nums 只會有一種數字重複,請回傳是哪個數字重複。
這題要求只能使用常數空間,並且不能夠修改 nums 本身
解法一開始的想法這題規定只能使用常數空間,就代表要用時間換空間,基本上陣列或是 unordered_set 這種額外樣保存 n筆陣列資料的方式都不能用了,另外如果直接使用雙重回圈暴力解應該也會 TLE,因此這裡需要別的做法
解法1234567891011121314151617181920212223242526class Solution {public: int findDuplicate(vector<int>& nums) { int left = 1; ...
刷題知識整理 | 圖(Graph)-3
前言要能夠確保像是有先修微積分,才能修工程數學,這種 有前後關係的圖論問題,通常會用 拓樸排序(Topological Sort)
利用 DFS 尋找 Strong Connected Components(SCC)Strong Connected Components (SCC)
Vertex 之間有雙向的 Edge 相連,例如 從 vertex(A) 走到 vertex(B) 同時 vertex(B) 也要有 edge 連到 vertex(A),就會說這兩個vertex 是 strongly connected 的。
通常可以透過多次的 DFS 來確定 Directed Graph 中有哪些 Strongly Connected Components , 要進行多次DFS的原因在於,只有一次DFS 可能沒辦法識別出全部的 COnnected Components,根據搜尋起點的不 ...
用圖判斷有效的樹 | Medium | LeetCode#261. Graph Valid Tree
題目敘述
題目難度: Medium
題目描述:
You have a graph of n nodes labeled from 0 to n - 1. You are given an integer n and a list of edges where edges[i] = [ai, bi] indicates that there is an undirected edge between nodes ai and bi in the graph.Return true if the edges of the given graph make up a valid tree, and false otherwise.
解法一開始的想法這題會是一個無向圖要判斷有沒有 Cycle,由於是無向圖判斷Cycle,因此可以透過 DFS來去看能不能形成一個 DFS Tree,如果不行那 ...
課程表 | Medium | LeetCode#210. Course Schedule II
題目敘述
題目難度: Medium
題目描述: 總共有 numCourses 課程需要上,他們被標注為 0 - numCourses-1,給定一個陣列 prerequisites 其中 prerequisites[i] = [a_i, b_i] 代表你需要先上過 b_i 課你才夠去上 a_i 課程。舉例來說,[0,1] 代表你需要先上課程 1 才能夠去上課程 0,請以陣列形式回傳上完所有課程的休課順序,如果沒辦法完成請回傳空陣列。
這題基本上是接續 LeetCode-207 Course Schedule,只不過上一題是判斷能否修完課,這題是要把修課順序印出來
解法一開始的想法不能修完課的狀況就是同時存在 [0,1], [1,0] 因為順序就反了,會在Graph中構成 Cycle, 因此如果這是有向無環圖(DAG) 則可透過 topological sort 印出依序走訪完全部課程 ...
在 BST 中進行搜尋 | Easy | LeetCode#700. Search in a Binary Search Tree
題目敘述
題目難度: Easy
題目描述: 題目給定一個Binary Search Tree,每個樹節點都有值 val,請在BST找到以該 val 作為值的節點,如果沒找到就回傳 null
解法BST 的特性就是左邊節點 < 右邊節點,因此只要跟每個節點比較輸入的 val ,如果 val 大於當前節點就去查找其右子樹的 root,如果小於就給左子樹的root,就這樣遞迴查找,如果碰到 Leaf 後還是沒有找到就回傳 nullptr
但注意某些題目的定義會是 <=
我的解法12345678910111213141516171819202122232425262728/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left ...
Proxmox VE 叢集部署 Promethues 以及 Grafana
前言在以前建立的 Proxmox VE 從集中,需要定期搜集GPU 功耗資訊作為腳本的判斷依據,因此需要 Promethues 進行資訊搜集。
節點背景資訊IP CIDR: 172.25.166.139/24CPU(s) 4 x Intel(R) Core(TM) i3-8100 CPU @ 3.60GHz (1 Socket)Kernel Version Linux 6.8.4-2-pve (2024-04-10T17:36Z)
安裝 Promethues建立 Promethues 使用者
12sudo groupadd --system prometheussudo useradd -s /sbin/nologin --system -g prometheus prometheus
建立 Promethues 必要目錄
12mkdir /var/lib/prometheusfor ...
之字形轉換 | Medium | LeetCode#6. Zigzag Conversion
題目敘述
題目難度: Medium
題目描述: 題目給定一個字串 s 假設是 PAYPALISHIRING,需要根據給定的列數 numRows 來用之字形 (Zigzag) 形式來呈現,並且逐列讀取字元後輸出字串 PAHNAPLSIIGYIR
123P A H NA P L S I I GY I R
解法一開始的想法這裡的之字形會是先往下,碰到底部後再往右上方移動,移動到頂部後再往下直到把所有的字元都寫完。之後再逐行輸出。一開始的想法就是用個2維陣列按照之字形來儲存字串值,然後按照跟題目一樣的規則來填充到2維陣列中,
我的解法但後來發現其實用一維度陣列就好,由於可以型態是字串,所以原先2為陣列的其他列都可以加入到對應行的後面,比較節省空間。
Ex.
123row 0 | "P A H N"row 1 | "A P L S ...
課程表 | Medium | LeetCode#207. Course Schedule
題目敘述
題目難度: Medium
題目描述:總共有 numCourses 課程需要上,他們被標注為 0 - numCourses-1,給定一個陣列 prerequisites 其中 prerequisites[i] = [a_i, b_i] 代表你需要先上過 b_i 課你才夠去上 a_i 課程。舉例來說,[0,1] 代表你需要先上課程 1 才能夠去上課程 0,如果可以完成所有課程就回傳 true 否則回傳 false。
解法一開始的想法一開始其實還沒有很懂題意,但在看了題目給的範例後才發現這題,其實是要在有向圖中找是否有 Cycle , 如果看範例二就可以發現他其實就是一個Cycle,並且也會邏輯上不順,先修課程0再修課程1 跟先修課程1再修課程0 這兩個沒辦法同時成立
我這裡一樣是透過 DFS 去做,但還沒處理過找Cycle 的題目,因此有看了下Hint,這裡會需要額外的陣列來 ...
KoKo 吃香蕉 | Medium | LeetCode#875. Koko Eating Bananas
題目敘述
題目難度: Medium
題目描述:Koko 愛吃香蕉,今天有 n 堆的香蕉,第 i 堆香蕉的數量會是 piles[i],香蕉由守衛看守,守衛目前不在,但他會在 h 小時候回來。Koko 每小時吃香蕉的速度會是 k,每一小時 Koko 會去挑選一堆香蕉吃,如果某堆香蕉的數量小於 k 則Koko 會將它們全吃掉,並且在那一小時中不會再去吃其他堆香蕉。雖然 Koko 吃的很慢,但是他還是希望在守衛回來前將所有的香蕉都吃完,為了達到這個目的,Koko 每小時吃香蕉的速度 k 最小會是多少?
解法一開始的想法一開始還在想要怎麼樣決定k,這裡可以透過 Binary Search 的方式去將不同堆的元素作為 k 去嘗試,嘗試的方式就是將每堆元素扣除 K 直到變成 0,同時記錄時數,只要最終時數小於 h 則回傳 k 值,只要最終時數大於 h 則繼續透過二元法找其他的 k
我的解法12345 ...
替換後的最長重複字元 | Medium | LeetCode#424. Longest Repeating Character Replacement
題目敘述
題目難度: Medium
題目描述: 給定一個字串 s 以及整數 k ,題目要求我們需要去將 s 中的任意字元替換成其他英文大寫字母,這樣的替換操作可以進行 k 次,在進行 k 次操做後,請回傳具有相同字母的最長的子字串
解法一開始的想法對於關鍵字,最長子字串,可以直接聯想到要使用 Sliding Window,但這題除了找到子字串之外,還需要透過 Hash Table 來去紀錄個別字母的出現頻率,同時在滑動窗口的同時需要紀錄最大長度。
我的解法1234567891011121314151617181920212223class Solution {public: int characterReplacement(string s, int k) { unordered_map<char, int> umap; ...