Leetcode 506:Relative Ranks

題目描述:https://leetcode.com/problems/relative-ranks/?tab=Description


題目分析:

  1. 最簡單的實現方法:對於每一個運動員得分,遍歷整個數組,記錄有幾個比他得分高的人。這樣雖然能夠實現,但是時間複雜度爲O(n^2)
AC代碼:
public class Solution {
    public String[] findRelativeRanks(int[] nums) {
        String[] res = new String[nums.length];
        for(int i=0; i<nums.length; i++){
            int curIndex = i;
            int curVal = nums[i];
            int cnt = 0;
            for(int j=0; j<nums.length; j++){
                if(nums[j] > curVal) cnt++;
            }
            if(cnt == 0){
                res[i] = "Gold Medal";
            }else if(cnt == 1){
                res[i] = "Silver Medal";
            }else if(cnt == 2){
                res[i] = "Bronze Medal";
            }else{
                res[i] = (cnt+1) + "";
            }
        }
        return res;
    }
}
代碼運行時間運行時間很長

2. 在本題中,我們需要記錄的兩個信息分別是:運動員得分的排名,該運動員在原nums數組中所處的位置。設置一個int類型的數組,flags,用來標示運動員排名的先後。flags數組的大小等於最高的分加1。這樣設置就能夠實現以下記錄功能:假設某運動員的得分以及在nums數組中的位置爲:nums[j] = k. 那麼對應就有,flags[k] = j+1(加1是爲了使其不爲0,在後面與沒有這一得分的flags做區別,也可以先將flags全設爲-1)。在flags數組中,越靠後的數組,其排名越高。
AC代碼:
public class Solution {
    public String[] findRelativeRanks(int[] nums) {
        int maxVal = -1;
        String[] res = new String[nums.length];
        for(int i=0; i<nums.length; i++){
            if(maxVal < nums[i]) maxVal = nums[i];
        }
        int[] flags = new int[maxVal + 1];
        for(int i=0; i<nums.length; i++){
            flags[nums[i]] = i + 1;
        }
        int cnt = 0;
        for(int i=flags.length-1; i>=0; i--){
            if(flags[i] != 0){
                cnt++;
                if(cnt == 1){
                    res[flags[i]-1] = "Gold Medal";
                }else if(cnt == 2){
                    res[flags[i]-1] = "Silver Medal";
                }else if(cnt == 3){
                    res[flags[i]-1] = "Bronze Medal";
                }else{
                    res[flags[i]-1] = cnt + "";
                }
            }
        }
        return res;
    }
}
代碼比較:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章