1331 陣列序號轉換

2021-10-19 11:25:29 字數 1242 閱讀 8259

給你乙個整數陣列 arr ,請你將陣列中的每個元素替換為它們排序後的序號。

序號代表了乙個元素有多大。序號編號的規則如下:

序號從 1 開始編號。

乙個元素越大,那麼序號越大。如果兩個元素相等,那麼它們的序號相同。

每個數字的序號都應該盡可能地小。

示例 1:

輸入:arr = [40,10,20,30]

輸出:[4,1,2,3]

解釋:40 是最大的元素。 10 是最小的元素。 20 是第二小的數字。 30 是第三小的數字。

示例 2:

輸入:arr = [100,100,100]

輸出:[1,1,1]

解釋:所有元素有相同的序號。

示例 3:

輸入:arr = [37,12,28,9,100,56,80,5,12]

輸出:[5,3,4,2,8,6,7,1,3]

0 <= arr.length <= 105

-109 <= arr[i] <= 109

class

solution

//(4)遍歷arr,讀取對應序號

for(

int i =

0; i < size; i++

) res.

push_back

(mymap[arr[i]])

;return res;}}

;

(1)特殊情況處理,輸入陣列為空時,返回空陣列;

(2)複製arr給arr_temp,對arr_temp排序;

(3)將arr_temp的值作為雜湊表mymap的鍵,將序號作為mymap的值;

(4)遍歷arr,將arr中的值作為mymap的鍵,讀取對應的序號,存於res中。

比如,示例為arr=[20,40,10,10]

步驟(1):跳過

步驟(2):arr_temp=[10,10,20,40]

步驟(3):mymap[10]=1,mymap[20]=2,mymap[40]=3

步驟(4):res=[2,3,1,1]

執行用時:108 ms, 在所有 c++ 提交中擊敗了94.58%的使用者

記憶體消耗:38.3 mb, 在所有 c++ 提交中擊敗了60.79%的使用者

1331 陣列序號轉換

給你乙個整數陣列 arr 請你將陣列中的每個元素替換為它們排序後的序號。序號代表了乙個元素有多大。序號編號的規則如下 序號從 1 開始編號。乙個元素越大,那麼序號越大。如果兩個元素相等,那麼它們的序號相同。每個數字的序號都應該盡可能地小。示例 1 輸入 arr 40,10,20,30 輸出 4,1,...

1331 陣列序號轉換

題目描述 給你乙個整數陣列 arr 請你將陣列中的每個元素替換為它們排序後的序號。序號代表了乙個元素有多大。序號編號的規則如下 序號從 1 開始編號。乙個元素越大,那麼序號越大。如果兩個元素相等,那麼它們的序號相同。每個數字的序號都應該盡可能地小。示例 1 輸入 arr 40,10,20,30 輸出...

1331 陣列序號轉換

1331.陣列序號轉換 給你乙個整數陣列arr,請你將陣列中的每個元素替換為它們排序後的序號。序號代表了乙個元素有多大。序號編號的規則如下 示例 1 輸入 arr 40,10,20,30 輸出 4,1,2,3 解釋 40 是最大的元素。10 是最小的元素。20 是第二小的數字。30 是第三小的數字。...