Leetcode506 相對名次 排序 雜湊

2021-09-22 18:07:50 字數 1837 閱讀 8561

給出 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...