1331.数组序号转换
链接:1331.数组序号转换
难度:Easy
标签:数组、哈希表、排序
简介:给你一个整数数组 arr ,请你将数组中的每个元素替换为它们排序后的序号。
题解 1 - rust
- 编辑时间:2022-07-28
- 执行用时:32ms
- 内存消耗:5.5MB
- 编程语言:rust
- 解法介绍:存到 map。
use std::collections::HashMap;
impl Solution {
    pub fn array_rank_transform(arr: Vec<i32>) -> Vec<i32> {
        let n = arr.len();
        let mut ilist = Vec::with_capacity(n);
        for i in 0..n {
            ilist.push(i)
        }
        ilist.sort_by(|a, b| arr[*a].cmp(&arr[*b]));
        let mut map = HashMap::<i32, i32>::new();
        let mut idx = 1;
        for i in 0..n {
            if i == 0 {
                map.insert(arr[ilist[i]], idx);
            } else if arr[ilist[i - 1]] == arr[ilist[i]] {
                continue;
            } else {
                idx += 1;
                map.insert(arr[ilist[i]], idx);
            }
        }
        arr
            .iter()
            .map(|num|*map.get(&num).unwrap())
            .collect()
    }
}