[leetcode -4]相對排序陣列
題目描述 (簡單難度)
原考題請見此。
解題說明
給定兩個陣列:arr1 是待排序的陣列,arr2 是基準陣列;arr2 內元素具唯一性,且每一元素必存在於 arr1 中。
將 arr1 陣列重新排序:存在於 arr2 的元素排列順序必須與 arr2 相同,不存在 arr2 的元素則由小到大排列。
限制:兩陣列長度最大為 1000,各元素數值為 0~1000 間。
解法 1. 迴圈暴力解
思路:
1. 逐一取出 arr2 內元素,比對 arr1 中相符元素放至結果陣列中
2. 標記已取出至結果的 arr1 元素為 -1。
題目限制兩陣列元素值介於 0~1000,因此標記值為 -1(只要不會被重複取出者即可)
3. 由 0~1000 逐一檢查 arr1 內是否有符合元素,有的話就放至結果陣列
解法 2. LINQ 搜尋解
思路:
1. 取出 arr1 中符合 arr2 的元素
2. 取出 arr1 中不屬於前述結果的元素,並由小到大排序
3. 將以上兩個結果串聯起來就是結果!
心得
兩種解法是完全不同的思考方式,做法都很有趣,猜猜看哪種作法的效率比較好呢?
猜猜看~
...
……
………
…………
答案是:
解法 1. 迴圈暴力解
解法1. 迴圈暴力解:耗時 228 ms,使用記憶體 31 MB
解法2. LINQ 搜尋解:耗時 240 ms,使用記憶體 31.5 MB
“Simple is Best“ 很有道理呢!