給出 n 名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 「金牌」,「銀牌」 和「 銅牌」(「gold medal」, 「silver medal」, 「bronze medal」)。
/**
* note: the returned array must be malloced, assume caller calls free().
*//*
思路:先將成績排個序, 然後將(成績-名次)鍵值對存入雜湊表中,再依次遍歷原陣列,輸出名次,將前三名轉換為相應的字元
*/void
quick_sort
(int
*nums,
int start,
int end)
}// 交換基準值
int tmp = nums[start]
; nums[start]
= nums[i]
; nums[i]
= tmp;
quick_sort
(nums, start, i -1)
;quick_sort
(nums, i +
1, end);}
typedef
struct hashkvhashkv;
typedef
struct hashtabhashtab;
void
init_hash
(hashtab *ht,
int count)
inthash
(hashtab *ht,
int key)
void
insert_hash
(hashtab *ht, hashkv kv)
ht->elems[addr]
.key = kv.key;
ht->elems[addr]
.value = kv.value;
}int
find_hash
(hashtab *ht,
int key)
return ht->elems[addr]
.value;
}char**
findrelativeranks
(int
* nums,
int numssize,
int* returnsize)
// 將o_nums排序 (需要從大到小排序)
quick_sort
(o_nums,
0, numssize -1)
;// 將排序的鍵值對插入雜湊表
hashtab *ht =
(hashtab *
)calloc(1
,sizeof
(hashtab));
init_hash
(ht, numssize)
;for
(i =
0; i < numssize; i++);
insert_hash
(ht, kv);}
//建立返回陣列
char
**ret =
(char**
)calloc
(numssize,
sizeof
(char*)
);for(i =
0; i < numssize; i++
)//用原陣列查詢雜湊表,取名次值
for(i =
0; i < numssize; i++)}
*returnsize = numssize;
return ret;
}
Leetcode 506相對名次
給出n名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 金牌 銀牌 和 銅牌 gold medal silver medal bronze medal 注 分數越高的選手,排名越靠前。示例 1 輸入 5,4,3,2,1 輸出 gold medal silver m...
LeetCode506 相對名次
給出 n 名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 金牌 銀牌 和 銅牌 gold medal silver medal bronze medal 注 分數越高的選手,排名越靠前。示例 1 n 是乙個正整數並且不會超過 10000。所有運動員的成績都不相同...
LeetCode 506 相對名次
class solution def findrelativeranks self,nums list int list str n len nums 陣列長度 ans 0 n 結果 dt 雜湊,記錄每個元素開始所在的位置 for i in range n dt nums i i nums.sort...