置頂

GeoGebra 文章目錄

GeoGebra 文章目錄  更新日期:2018/2/8 我將 GeoGebra 相關的文章及檔案連結都整理在這篇裡,之後如果有新的文章也會同時更新這個目錄。上傳到 GeoGebraTube 的檔案,我有試著用 Google Chrome 63.0.3239.13...

熱門文章

2026年7月12日 星期日

LeetCode 解題筆記:1331. Rank Transform of an Array

作者:王一哲
日期:2026年7月12日


LeetCode 題目連結:1331. Rank Transform of an Array

解題想法


簡單題。題目給一個陣列 $arr$,要將陣列中數字對應的排名組成陣列後再回傳陣列。我先將原來的陣列複製一份,將複製後的陣列排序,從排序後的陣列讀取數字、找出對應的排名,將數字、排名存入字典之中。最後再從原來的陣列依序讀取數字,從字典中找出對應的排名並組成陣列。

Python 程式碼


Runtime: 43 ms, beats 49.41%. Memory: 37.60 MB, beats 60.61%.
class Solution:
    def arrayRankTransform(self, arr: List[int]) -> List[int]:
        sorted_arr = sorted(arr)  # 複製一份 arr 的資料並排序
        rank = dict()  # 用來儲存數字對應的排名
        idx = 0  # 排名
        curr = float('-inf')  # 目前排名的數字
        for a in sorted_arr:  # 從排序後的串列讀取數字
            if a > curr:  # 如果 a 大於 curr
                idx += 1  # 排名加 1
                curr = a  # 更新 curr
            rank[a] = idx  # 更新 a 對應的排名
        return [rank[a] for a in arr]  # 依序從 arr 讀取數字、轉成排名、組成串列


C++ 程式碼


Runtime: 35 ms, beats 88.64%. Memory: 45.31 MB, beats 20.80%.
class Solution {
public:
    vector<int> arrayRankTransform(vector<int>& arr) {
        // 複製一份 arr 的資料並排序
        vector<int> sorted_arr (arr.begin(), arr.end());
        sort(sorted_arr.begin(), sorted_arr.end());
        unordered_map<int, int> rank;  // 用來儲存數字對應的排名
        int idx = 0, curr = -1000000001;  // 排名、目前排名的數字
        for(int a : sorted_arr) {  // 從排序後的陣列讀取數字
            if (a > curr) { // 如果 a 大於 curr
                idx++;  // 排名加 1
                curr = a;  // 更新 curr
            }
            rank[a] = idx;  // 更新 a 對應的排名
        }
        // 依序從 arr 讀取數字、轉成排名、組成陣列
        vector<int> ans;
        for(int a : arr) {
            ans.push_back(rank[a]);
        }
        return ans;
    }
};


沒有留言:

張貼留言