Skip to content

Instantly share code, notes, and snippets.

資料結構與演算法 - selection sort

tags: 資料結構與演算法,Algorithms,Data Structure

選擇排序法

在未排序的陣列中,一直去找尋最小的值,再去跟陣列第一個互換。

思考

要先在陣列中依序找出最小的值。因為是兩兩一組比較,前一個元素index最多只會到陣列長度的-2,後一個元素index最多只會到陣列長度的-1。

怎麼找出最小值,一開始先將第一個元素(index為0)當成最小值,下一個元素要是比它小就交換。

資料結構與演算法 - bubble sort

tags: 資料結構與演算法,Algorithms,Data Structure

泡沫排序法

泡沫排序為在一個陣列中比較相鄰的元素,如果位置是錯(大的在小的前面)的就要互換。

思考

陣列內兩兩一組去比較大小,排序錯誤就交換。

實作

資料結構與演算法 - array of arrays

tags: 資料結構與演算法,Algorithms,Data Structure

問題

一個陣列內,有陣列跟陣列中的陣列,就像是俄羅斯娃娃,請寫出一個函式,回傳一個陣列並列出所有值。

思考

針對該陣列迴圈,如果元素是陣列就跑迴圈,不是就push到要回傳的陣列內。

實作

資料結構與演算法 - recusion and fibonacci sequence

tags: 資料結構與演算法,Algorithms,Data Structure

什麼是遞迴?

在自己函式內部執行自己。

在JS中,如果執行某函式內一個的函式,就是處於call stack。 call stack的資料結構是個堆疊(Stack),這種資料結構具有後進先出(LIFO, Last in First out)的特性。而在每一次呼叫函式時,會把這個函式添加到堆疊的最上方,執行完後才將函式從上方抽離。

在數學當中,也有遞迴的運用。

資料結構與演算法 - largest product

tags: 資料結構與演算法,Algorithms,Data Structure

問題

在陣列中,n個相鄰的數字,找出能求出最大乘積的數字。

思考

n個為一組,透過迴圈找出最大的乘積。

實作

資料結構與演算法 - unique letter string

tags: 資料結構與演算法,Algorithms,Data Structure

問題

寫一個函式,參數為字串,會回傳所有字母都不同且長度最長的子字串。 例如:uniqueLetterString('thisishowwedoit') ,會回傳wedoit

思考

使用slide window的概念,利用迴圈去一個個元素。

資料結構與演算法 - min subarray length

tags: 資料結構與演算法,Algorithms,Data Structure

問題

寫出一個有兩個參數的函式,第一個參數為內容都是正整數的陣列,第二個參數為正整數。從第一個參數中找出「子陣列」,其總和大於等於第二個參數,求出最短的子陣列長度。無法求得就回傳0。

子陣列為:一個子陣列,是從另一個陣列拿去零個以上連續的元素。例如:

const arr = [1,2,3,4,5,6] 
[1,2,3]  // 為arr的子陣列

資料結構與演算法 - slide window,min sum and max sum

tags: 資料結構與演算法,Algorithms,Data Structure

什麼是slide window

假設一串陣列是[A,B,C,D,E,F,G],4個元素為一組,每個元素依序當開頭,直到slide到最後一個元素:

[A,B,C,D]
  [B,C,D,E]
    [C,D,E,F]
 [D,E,F,G]

資料結構與演算法 - subsequence problem

tags: 資料結構與演算法,Algorithms,Data Structure

問題

subsequence,字串的子序列性,是指某個字串的組成,是透過另一個字串,拿掉一些字母(或是沒拿掉任何字母)而形成的。

創建一個函式有兩個參數都是字串,判斷兩個字串是否有「子序列性」,該兩個參數順序隨機。例如:bookbrooklyn,同樣的字母有同樣的順序性。

思考

將兩個字串排隊排好,比較短的那個隊伍(簡稱隊伍B),取第一個字母去跟比較長的隊伍(簡稱隊伍A)比較是否有一樣的字母。如果比對到一樣的字母(位置簡稱為index),將該字從隊伍B刪除,並從隊伍B的下一個字母成員,從剛剛比對到的位置(index)接續比對。如果最後隊伍B還有成員,代表不符合子序列性。

資料結構與演算法 - palindrome

tags: 資料結構與演算法,Algorithms,Data Structure

問題

創建一個函式,判斷一個字串是不是palindrome,意思是該字串正著寫跟反過來寫是一樣的。 例如:

tacocat -> 是
surprise -> 不是