LeetCode-1743. Restaurar la matriz a partir de código y análisis de pares adyacentes (Java)

LeetCode-1743. Restaurar la matriz a partir de pares adyacentes [Restaurar la matriz a partir de pares adyacentes] -Análisis y código [Java]

1. Tema

Hay una matriz de números enteros compuesta por n elementos diferentes, pero no puede recordar el contenido específico. Afortunadamente, recuerdas cada par de elementos adyacentes en nums.
Le damos una matriz de enteros bidimensionales adyacentesPares, el tamaño es n-1, donde cada Pares adyacentes [i] = [ui, vi] significa que los elementos ui y vi son adyacentes en números.
Los datos del título garantizan que todos los pares de elementos adyacentes que consisten en elementos nums [i] y nums [i + 1] existen en pares adyacentes. La forma de existencia puede ser [nums [i], nums [i + 1]] o puede ser [números [i + 1], números [i]]. Estos pares de elementos adyacentes pueden aparecer en cualquier orden.
Devuelve los números de matriz originales. Si hay varias respuestas, devuelva cualquiera de ellas.

Ejemplo 1:

输入:adjacentPairs = [[2,1],[3,4],[3,2]]
输出:[1,2,3,4]
解释:数组的所有相邻元素对都在 adjacentPairs 中。
特别要注意的是,adjacentPairs[i] 只表示两个元素相邻,并不保证其 左-右 顺序。

Ejemplo 2:

输入:adjacentPairs = [[4,-2],[1,4],[-3,1]]
输出:[-2,4,1,-3]
解释:数组中可能存在负数。
另一种解答是 [-3,1,4,-2] ,也会被视作正确答案。

Ejemplo 3:

输入:adjacentPairs = [[100000,-100000]]
输出:[100000,-100000]

inmediato:

  • nums.length == n
  • adyacentesPairs.length == n - 1
  • Pares adyacentes [i] .length == 2
  • 2 <= n <= 105
  • -105 <= números [i], ui, vi <= 105
  • Los datos del título aseguran que hay algunos números de matrices con pares adyacentes como pares de elementos

Fuente: LeetCode (LeetCode)
Enlace: https://leetcode-cn.com/problems/restore-the-array-from-adherent-pairs Los
derechos de autor son propiedad de LeadCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

Dos, análisis y código

1. Tabla hash

(1) Pensando

A través de las dos tablas hash, registre la relación adyacente entre los elementos, combinada con el número de estadísticas para obtener el primer elemento, puede inferir la matriz original.

(2) Código

class Solution {
    
    
    public int[] restoreArray(int[][] adjacentPairs) {
    
    
        int n = adjacentPairs.length + 1, len = 200001, delta = 100000;
        int [] map1 = new int[len], map2 = new int[len], num = new int[len], ans = new int[n];
        for (int i = 0; i < len; i++) {
    
    
            map1[i] = -1;
            map2[i] = -1;
        }
                
        //统计元素个数、构造哈希表
        for (int[] adj : adjacentPairs) {
    
    
            int a = adj[0], b = adj[1];
            num[a + delta]++;
            num[b + delta]++;
            if (map1[a + delta] == -1)
                map1[a + delta] = b;
            else
                map2[a + delta] = b;
            if (map1[b + delta] == -1)
                map1[b + delta] = a;
            else
                map2[b + delta] = a;
        }

        //求原始数组前2元素
        ans[0] = findNum0(num) - delta;
        if (map1[ans[0] + delta] != -1)
            ans[1] = map1[ans[0] + delta];
        else
            ans[1] = map2[ans[0] + delta];
        
        //求原始数组其他元素
        int last2 = ans[0], last = ans[1];
        for (int i = 2; i < n; i++) {
    
    
            if (map1[last + delta] != last2)
                ans[i] = map1[last + delta];
            else
                ans[i] = map2[last + delta];
            last2 = last;
            last = ans[i];
        }
        
        return ans;
    }
    
    public int findNum0(int[] num) {
    
    
        for (int i = 0; i < num.length; i++)
            if (num[i] == 1)
                return i;
        return -1;
    }
}

(3) Resultados

Tiempo de ejecución: 27 ms, superando al 99,84% de los usuarios
en todas las presentaciones de Java ; consumo de memoria: 80,7 MB, superando al 78,96% de los usuarios en todas las presentaciones de Java.

Tres, otro

Reemplazando directamente las variables len y delta con números, se puede obtener más del 100% del tiempo de ejecución.

Supongo que te gusta

Origin blog.csdn.net/zml66666/article/details/113812328
Recomendado
Clasificación