[Pregunta diaria de LeetCode] - 1331. Conversión de número de serie de matriz

Una [categoría de tema]

  • para ordenar

Dos [dificultad de la pregunta]

  • Simple

Tres [número de tema]

  • 1331. Conversión de número de serie de matriz

Cuatro [descripción del título]

  • Dada una matriz de enteros, reemplace cada elemento de la matriz con su número de serie ordenado.
  • El número ordinal representa qué tan grande es un elemento. Las reglas para la numeración de serie son las siguientes:
    • El número de serie comienza con 1.
    • Cuanto mayor sea el elemento, mayor será el número de secuencia. Si dos elementos son iguales, entonces sus ordinales son iguales.
    • El ordinal de cada número debe ser lo más pequeño posible.

Cinco [ejemplo de tema]

  • Ejemplo 1:

    • Entrada: matriz = [40,10,20,30]
    • Salida: [4,1,2,3]
    • Explicación: 40 es el elemento más grande. 10 es el elemento más pequeño. 20 es el segundo número más pequeño. 30 es el tercer número más pequeño.
  • Ejemplo 2:

    • Entrada: matriz = [100,100,100]
    • Salida: [1,1,1]
    • Explicación: Todos los elementos tienen el mismo número ordinal.
  • Ejemplo 3:

    • Entrada: arr = [37,12,28,9,100,56,80,5,12]
    • Salida: [5,3,4,2,8,6,7,1,3]

Seis [mensaje de tema]

  • 0 < = arreglo . longitud < = 1 0 5 0 <= longitud arr. <= 10^50<=un rrr _ longitud _ _ _ _ _<=1 05
  • − 1 0 9 < = arr [ yo ] < = 1 0 9 -10^9 <= arr[i] <= 10^91 09<=un r [ yo ]<=1 09

Siete [ideas para resolver problemas]

  • Usar ordenar + hash
  • Primero copie la matriz original y luego ordene la matriz original de pequeña a grande
  • Luego, haga un hash de la matriz ordenada, la clave es el valor de la matriz, val es la clasificación correspondiente al valor de la matriz, de modo que el valor de la matriz se pueda deduplicar y el subíndice de la matriz correspondiente a cada valor de la matriz se pueda registrar
  • Finalmente, recorra la matriz copiada, y para cada elemento sacamos su posición ordenada y la establecemos en el valor actual
  • Finalmente, devuelva la matriz copiada.

Ocho 【Frecuencia de tiempo】

  • Complejidad del tiempo: O ( nlogn ) O(nlogn)O ( n l o g n ) ,nnn es la longitud de la matriz entrante
  • Complejidad espacial: O ( n ) O(n)O ( n ) ,nnn es la longitud de la matriz entrante

Nueve [implementación de código]

  1. Versión del lenguaje Java
class Solution {
    
    
    public int[] arrayRankTransform(int[] arr) {
    
    
        int n = arr.length;
        int[] temp = new int[n];
        for(int i = 0;i < n;i++){
    
    
            temp[i] = arr[i];
        }
        Arrays.sort(arr);
        HashMap<Integer, Integer> map = new HashMap<>();
        for(int i = 0;i < n;i++){
    
    
            if(!map.containsKey(arr[i])){
    
    
                map.put(arr[i], map.size() + 1);
            }
        }
        for(int i = 0;i < n;i++){
    
    
            temp[i] = map.get(temp[i]);
        }
        return temp;
    }
}
  1. Versión en lenguaje C
typedef struct
{
    
    
    int key;
    int val;
    UT_hash_handle hh;
}HashItem;

int cmp(const void *a, const void *b)
{
    
    
    return *(int *)a - *(int *)b;
}

int* arrayRankTransform(int* arr, int arrSize, int* returnSize)
{
    
    
    int* sortArr = (int*)malloc(sizeof(int) * arrSize);
    int* res = (int*)malloc(sizeof(int) * arrSize);
    memcpy(sortArr, arr, sizeof(int) * arrSize);
    qsort(sortArr, arrSize, sizeof(int), cmp);
    HashItem *map = NULL;
    for(int i = 0;i < arrSize;i++)
    {
    
    
        HashItem *temp = NULL;
        HASH_FIND_INT(map, &sortArr[i], temp);
        if(temp == NULL)
        {
    
    
            temp = (HashItem *)malloc(sizeof(HashItem));
            temp->key = sortArr[i];
            temp->val = HASH_COUNT(map) + 1;
            HASH_ADD_INT(map, key, temp);
        }
    }
    for(int i = 0;i < arrSize;i++)
    {
    
    
        HashItem *temp = NULL;
        HASH_FIND_INT(map, &arr[i], temp);
        res[i] = temp->val;
    }
    *returnSize = arrSize;
    HashItem *cur, *temp;
    HASH_ITER(hh, map, cur, temp)
    {
    
    
        HASH_DEL(map, cur);
        free(cur);
    }
    free(sortArr);
    return res;
}
  1. Versión en lenguaje Python
class Solution:
    def arrayRankTransform(self, arr: List[int]) -> List[int]:
        n = len(arr)
        temp = [0] * n
        for i in range(0, n):
            temp[i] = arr[i]
        arr.sort()
        map = {
    
    }
        for i in range(0, n):
            if arr[i] not in map:
                map[arr[i]] = len(map) + 1
        for i in range(0, n):
            temp[i] = map[temp[i]]
        return temp
  1. Versión del lenguaje C++
class Solution {
    
    
public:
    vector<int> arrayRankTransform(vector<int>& arr) {
    
    
        int n = arr.size();
        vector<int> temp = arr;
        sort(arr.begin(), arr.end());
        unordered_map<int, int> map;
        for(int i = 0;i < n;i++){
    
    
            if(!map.count(arr[i])){
    
    
                map[arr[i]] = map.size() + 1;
            }
        }
        for(int i = 0;i < n;i++){
    
    
            temp[i] = map[temp[i]];
        }
        return temp;
    }
};

Diez 【Resultados de envío】

  1. Versión del lenguaje Java
    inserte la descripción de la imagen aquí

  2. Versión en lenguaje C
    inserte la descripción de la imagen aquí

  3. Versión en lenguaje Python
    inserte la descripción de la imagen aquí

  4. Versión del lenguaje C++
    inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/IronmanJay/article/details/132309912
Recomendado
Clasificación