176. Second Highest Salary
176. Second Highest Salary本題主要考驗抓取第二大值跟包兩層select用法
Calculate Special Bonus
透過leetcode 176Second Highest Salary來練習
使用table
id 是該表的主鍵列。此表的每一行都包含有關員工工資的信息。
題目說明:編寫 SQL 查詢以報告表中第二高的薪水。如果沒有第二高的薪水,則查詢應報告。Employeenull
查詢結果格式如以下範例所示。
解題:
先以 salary < (select max(salary) from Employee) 設定除了最大值以外的條件(去掉最大值)
在抓出 max(salary) 剩下的最大值(第二大值)
select max(salary) as SecondHighestSalary from Employeewhere salary < (select max(salary) from Employee)
霍夫曼編碼 (Huffman coding)
霍夫曼編碼 (Huffman coding)介紹
Huffman 編碼是一種常用的數據壓縮算法,由 David A. Huffman 在 1952 年發明。它通過對字符出現的頻率進行編碼,將出現頻率高的字符用較短的位元串(Bit Strings)表示,而出現頻率低的字符用較長的位元串(Bit Strings)表示,從而實現對數據的壓縮。
Huffman 編碼是一種基於貪心算法的編碼方法,它首先根據字符頻率構建一棵 Huffman 樹,然後對每個字符進行編碼。構建 Huffman 樹的過程中,可以使用 Min Heap 來維護節點,每次從 Heap 中取出頻率最小的兩個節點合併成一個新節點,直到 Heap 中只剩下一個節點,即 Huffman 樹的根節點。
Huffman 編碼採用前綴編碼(prefix code)方式,保證了編碼的唯一性和無歧義性。在解碼時,從 Huffman 樹的根節點開始遍歷,遇到 0 就進入左子樹,遇到 1 就進入右子樹,直到葉子節點,即可得到原始字符。
由於 Huffman 編碼採用變長編碼,可以在一定程度上減少數據存儲所需的空間,從而減少數據傳輸所需的帶寬和存 ...
Pinia介紹
Pinia介紹大綱
Pinia簡介
Pinia & Vuex
Pinia架構
創建Store
Pinia簡介
可跨元件/頁面共享狀態
支援Vue2和Vue3
TypeScript支援
Actions 支援同步和非同步
移除了Mutations
Pinia&Vuex
Pinia架構
安裝
掛載
創建StoreCPMPF/src/ store
定義Store引入defineStore
Store ID
Store ID 必須為唯一值
如果ID 重複,在同一個Vue元件/ TS檔裡定義Store 實例變數的時候,會以先定義的為有效值,後續定義的store不會覆蓋先前定義的store
Store範例
元件引入Pinia
取用stateComponents引入完此時store已經是proxy的格式,直接”userStore.”就可以取出變數或方法
storeToRefs 解構
透過解構來生省略用時”userStore.”的字眼
state、getters需透過pinia的storeToRefs方法來解構(若用一般方法解構會失去響應式的功能)
Store裡的funct ...
Two Pointers
Two PointersTwo Pointers常用在搜尋,他在一個給定的資料結構中做循環並給定兩個指針,用來解決編碼上的問題,常用在字串,陣列或鏈結串列 (Linked list)中。
此演算法可以幫助我們對某些資料結構做某種方式的排序,例如977. Squares of a Sorted Array或283. Move Zeroes等等,它可以幫助我們將時間複雜度從O(n^2) 或是 O(n^3) 縮減成 O(n)
而根據字串或陣列是否有排序,利用Two Pointers演算法,時間複雜度最差為O(n logn)更好為O(n)。
左右指標一個從頭開始,另一個從結尾
(圖片來自Basics of Two Pointers Technique)
範例題目利用leetcode167. Two Sum II - Input Array Is Sorted來做練習,這題題目會跟1. Two Sum有點相似,但作法有限制,廢話不多說先來看題目。
題目說明給定一個非降序排序的數組,需要找到哪兩個索引位置的值加起來會等於target,並將其索引位置加一數組返回[index1 + 1, index ...
181. Employees Earning More Than Their Managers
181. Employees Earning More Than Their Managers(資訊來自於leetcode 181 Employees Earning More Than Their Managers)
員工的收入超過他們的經理編寫 SQL 查詢以查找收入高於其經理的員工。
以任意順序返回結果表。
解題方式:select M.name as Employeefrom Employee Mwhere salary > (select salary from Employee A where M.managerId = A.id)
解題解析:此題用where去做解題,用salary來比大小,用命名為不同名稱但同一個table來比較,managerID必須要等於id,找出相同的salary並且來做比大小就能得到收入高於經理的員工,Joe。
1141. User Activity for the Past 30 Days I
1141. User Activity for the Past 30 Days IFix Names in a Table
透過leetcode 1141 User Activity for the Past 30 Days I來練習
題目有問題
此表沒有主鍵,它可能有重複的行。activity_type 列是一個 ENUM 類型(’open_session’、’end_session’、’scroll_down’、’send_message’)。該表顯示了社交媒體網站的用戶活動。請注意,每個會話僅屬於一個用戶。
題目說明:
編寫 SQL 查詢以查找結束的天數的每日活動用戶計數。如果使用者在某一天至少進行了一項活動,則該使用者在該天處於活動狀態。302019-07-27
按任意順序返回結果表。
查詢結果格式如下例所示。
解題:以下為第一個例題
select activity_date as day, count(user_id) as active_usersfrom (select distinct user_id,activity_date from activity)awhe ...
時間複雜度 與 空間複雜度
時間複雜度 與 空間複雜度同一個演算法在不同等級的電腦上跑,效率可能會有所不同,我們可以透過比較科學的方式,就是計算時間複雜度(Time Complexity)與空間複雜度(Space Complexity)來判斷演算法好壞。
時間複雜度
衡量程式執行的速度
介紹時間複雜度可以使用Big O Notation來展示複雜度的趨勢,Big-Ο代表演算法時間函式的上限(Upper bound),而在最壞的狀況下,演算法的執行時間不會超過Big-Ο。
那該如何計算Big O Notation,有三個規則:
常數可忽略不計
取最大次方
Log底數可忽略不計
假設我們要求f(n) = 3n+2這段方程式的時間複雜度,根據上面所述規則,將常數部分去掉,根據漸進分析,在n變得非常大時,常數部分就變得微不足道,於是取得時間複雜度為O(n)。
以下為常見時間複雜度,接下來會一一舉例。
Big O Notation
別名
常見演算法
$O(1)$
常數
陣列讀取
$O(n)$
線性
Linear search
$O(logn)$
對數(Logarithmic )
二分搜尋法
...
氣泡排序(Bubble Sort)
氣泡排序(Bubble Sort)介紹氣泡排序是反覆進行將相鄰數字做比較後重新排序,因排序時一個一個浮出序列頂部,很像水中泡泡浮起來的樣子,亦稱泡泡排序,最壞情況下,數是由大排到小,每次比較後將數值對調,因此,時間複雜度為O(n^2)。
圖片來源
虛擬碼function bubble_sort (array, length) { var i, j; for(i from 0 to length-1){ for(j from 0 to length-1-i){ if (array[j] > array[j+1]) swap(array[j], array[j+1]) } }}
複雜度時間複雜度$O(n^2)$
空間複雜度$O(1)$
實戰75. Sort Colors
題目說明給定一個數組 nums,其中有 n 個對象,顏色為紅色、白色或藍色,並對它們進行排序,顏色按紅色、白色和藍色的順序排列。 將使用整數 0、1 和 2 分 ...
堆積排序(Heap Sort)
堆積排序(Heap Sort)在提到堆積排序前我們先講講樹的資料結構,因為在堆積排序中會使用到某一種樹。
樹-資料結構那樹是甚麼
抽象資料類型
被用來模擬分層資料結構
無循環graph
在樹當中只會有一個root value,也就是樹根,看到下面那張圖7,5,6,9都有Subtree(子樹),每個圈圈我們稱它為node(節點),箭頭稱為edge,以圖片藍色圈起來的子樹為例,7就是2, 10, 6的parent node,而2, 10, 6就是7的children node。
二元樹(Binary Tree)在樹的資料結構中有許多不同的樹,最常見的樹為二元樹。
二元樹中也有不同種類
(Types of Binary Tree || Designed by Anand K Parmar)
1. Full Binary TreeFull Binary Tree 每個節點都有 0 或 2 個子節點
2. Complete Binary TreeComplete Binary Tree 除了最後一層外,所有層節點都是滿的,在最後一層中,節點盡可能位於左側
3. Degenerate(o ...
Sass學習筆記
Sass筆記
介紹
Sass 是 CSS 預處理器(CSS Preprocessor)的一種
預處理器是讓開發者撰寫一些類似 CSS 語法的指令,再轉為瀏覽器能懂的 CSS
SASS / SCSS 檔案需編譯為 CSS 檔
Sass 支持所有現代瀏覽器,並且與 CSS3 兼容。
節省許多時間,因為減少了 CSS 的重複
SASS vs. SCSSSass 和 SCSS 是兩種不同的 Sass 語法格式
SCSS(Sassy CSS)使用.scss文件擴展名稱,使用常規的 CSS 語法和大括號來結構化代碼,需加上 {} ;。
/* .scss file */$bgcolor: blue; /* use variables */body { background-color: $bgcolor;}.container { width: 100%;}
SASS(Indented Sass)使用.sass文件擴展名稱,使用縮排而不是括號,取消{} ;,它不完全符合 CSS 語法,但編寫起來更快。
此寫 ...




