506. Relative Ranks(重)

嗯。。。寫得也很丑,自己就是寫得最笨的那種先新建排序,然后依次查找排序后位置來決定相對(duì)名次,感覺笨笨的,不知道能不能利用map按key值排序來做?看看別人怎么寫得吧

自己的解法

class Solution {
public:
    vector<string> findRelativeRanks(vector<int>& nums) {
        vector<string> output;
        vector<int> temp = nums; 
        vector<string> medal;
        medal.push_back("Gold Medal");
        medal.push_back("Silver Medal");
        medal.push_back("Bronze Medal");
        sort(temp.begin(), temp.end());
        for (int i = 0; i < nums.size(); i ++){
            int j = 0;
            while (temp[j] != nums[i])
                j++;
            int k = nums.size() - j;
            if (k <= 3){
                output.push_back(medal[k-1]);
            }else{
                output.push_back(to_string(k));
            }
                
        }
        return output;
    }
};

人家的解法

看似類似的解法

挺重要的,注意理解vector的直接賦值。。。在這里不會(huì)耗費(fèi)大量空間,與上次遇到的不同。寫得比我好。

class Solution {
public:
    vector<string> findRelativeRanks(vector<int>& nums) {
        vector<int> rank;
        for(int i=0; i<nums.size(); ++i) rank.push_back(i);
        
        sort(rank.begin(), rank.end(), [&](int a, int b){return nums[a] > nums[b];});
        vector<string> ranks(nums.size());
        
        for(int i=3; i<nums.size(); ++i){
            ranks[rank[i]] = std::to_string(i+1);
        }
        
        if(nums.size() > 0) ranks[rank[0]] = "Gold Medal";
        if(nums.size() > 1) ranks[rank[1]] = "Silver Medal";
        if(nums.size() > 2) ranks[rank[2]] = "Bronze Medal";
        
        return ranks;
    }
};

沒遇到過的解法

神奇的priority_queue,以后好好看看是怎么用的。

class Solution {
public:
    vector<string> findRelativeRanks(vector<int>& nums) {
        priority_queue<pair<int,int> > pq;
        for(int i=0;i<nums.size();i++)
        {
            pq.push(make_pair(nums[i],i));
        }
        vector<string> res(nums.size(),"");
        int count = 1;
        for(int i=0; i<nums.size();i++)
        {
            if(count==1) {res[pq.top().second] = "Gold Medal"; count++;}
            else if(count==2) {res[pq.top().second] = "Silver Medal"; count++;}
            else if(count==3) {res[pq.top().second] = "Bronze Medal"; count++;}
            else {res[pq.top().second] = to_string(count); count++;}
            pq.pop();
        }
        return res;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言: 詳細(xì)介紹: List:元素有放入順序,元素可重復(fù)Map:元素按鍵值對(duì)存儲(chǔ),無放入順序Set:元素?zé)o放入順序...
    YBshone閱讀 8,874評(píng)論 0 17
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,921評(píng)論 0 33
  • Scala的集合類可以從三個(gè)維度進(jìn)行切分: 可變與不可變集合(Immutable and mutable coll...
    時(shí)待吾閱讀 5,954評(píng)論 0 4
  • 容器的概念所謂STL容器,即是將最常運(yùn)用的一些數(shù)據(jù)結(jié)構(gòu)(data structures)實(shí)現(xiàn)出來。容器是指容納特定...
    飯飯H閱讀 442評(píng)論 0 0
  • “我們分手吧!”應(yīng)遇看著眼前這個(gè)正在哭泣的凌落汐。雖然于心不忍,但…不想讓她傷心。 因?yàn)椴幌矚g了,所以應(yīng)遇打...
    芷落閱讀 595評(píng)論 0 0

友情鏈接更多精彩內(nèi)容