Devuelva Kth para durar: implementar un algoritmo para encontrar el elemento de Kth al último de una lista vinculada individualmente -- java campo con algorithm campo con linked-list campo con hash-map camp codereview Relacionados El problema

Return Kth to Last: Implement an algorithm to find the kth to last element of a singly linked list


3
vote

problema

Español

Implementar un algoritmo para encontrar el elemento del kth al último de una lista vinculada individualmente.

¿Algún comentario o comentario sobre esto?

Se me ocurrió otro algoritmo que usa HashMap para encontrar el kth al último elemento en un LinkedList .

  public static int getKthToLastElement(LinkedListNode head, int k){     LinkedListNode n = head;      if(head == null || k < 0)         return -1;      int index = 0;     HashMap<Integer,Integer> map = new HashMap<Integer, Integer>();     while (n != null){         map.put(index,n.data);         index++;         n = n.next;     }      if(k > map.size() -1){         return  -1;     }     return map.get(map.size() - 1 - k); }   
Original en ingles

Implement an algorithm to find the kth to last element of a singly linked list.

Any comments or feedback regarding this?

I came up with another algorithm that uses HashMap to find the kth to the last element in a LinkedList.

public static int getKthToLastElement(LinkedListNode head, int k){     LinkedListNode n = head;      if(head == null || k < 0)         return -1;      int index = 0;     HashMap<Integer,Integer> map = new HashMap<Integer, Integer>();     while (n != null){         map.put(index,n.data);         index++;         n = n.next;     }      if(k > map.size() -1){         return  -1;     }     return map.get(map.size() - 1 - k); } 
           
   
   

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Su if(head == null || k < 0) ESPECIAL es innecesario, ya que está cubierto por la prueba 9988776665544331 . También debe nunca omita los frenos "opcionales" para un bloque de múltiples líneas.

En realidad, la prueba if(k > map.size() -1)665544332 también se puede eliminar, si usó Map.getOrDefault(…, -1) .

El bucle se reconocería más fácilmente si se escribe como un bucle 9988776655544334

  public static int getKthToLastElement(LinkedListNode head, int k) {     int index = 0;     Map<> map = new HashMap<Integer, Integer>();     for (LinkedListNode n = head; n != null; n = n.next) {         map.put(index++, n.data);     }     return map.getOrDefault(map.size() - 1 - k, -1); }   

Creo que la conversión de la lista vinculada a un ArrayList sería mejor que convertirlo en un 9988776665544337 . Luego, estaría convirtiendo una lista vinculada incómoda en un tipo de lista que sea útil e idiomática en Java.

 

Your if(head == null || k < 0) special case is unnecessary, since it is covered by the if(k > map.size() -1) test. You should also never omit the "optional" braces for a multi-line block.

Actually, the if(k > map.size() -1) test could also be eliminated, if you used Map.getOrDefault(xe2x80xa6, -1).

The loop would be more easily recognized if written as a for loop.

public static int getKthToLastElement(LinkedListNode head, int k) {     int index = 0;     Map<> map = new HashMap<Integer, Integer>();     for (LinkedListNode n = head; n != null; n = n.next) {         map.put(index++, n.data);     }     return map.getOrDefault(map.size() - 1 - k, -1); } 

I think that converting the linked list to an ArrayList would be better than converting it to a HashMap. You would then be converting a cumbersome linked list into a kind of list that is useful and idiomatic in Java.

 
 
1
 
vote

Siempre use tirantes rizados, incluso cuando el compilador no es requerido.

Es una práctica deficiente para que LinkedListNode expondrá directamente a sus internos ( 99887776655443388 , 9988776655544339 . Use accesorios.

Utilice las interfaces donde sea apropiado ( 99887766555443310 ). Usted no necesita ningún if(k > map.size() -1)1 Comportamiento específico después de la Declaración.

Utilice el espacio en blanco consistentemente e idiomáticamente. Debe haber un espacio antes de un if(k > map.size() -1)2 , entre if(k > map.size() -1)3 if(k > map.size() -1)4 , y después de un if(k > map.size() -1)5 .

Su algoritmo usa más espacio de lo que necesita. Este problema se puede resolver en if(k > map.size() -1)6 TIEMPO CON if(k > map.size() -1)7 espacio. Mantenga un puntero líder y un puntero de arrastre, con el puntero líder if(k > map.size() -1)8 pasos por delante. Cuando el puntero principal golpea el final, el puntero final apunta al nodo deseado.

Si debía aplicar todas mis sugerencias, su código podría parecer más a:

  if(k > map.size() -1)9  
 

Always use curly braces, even when theyxe2x80x99re not required by the compiler.

Itxe2x80x99s a poor practice for LinkedListNode to expose its internals directly (n.data, n.next. Use accessors.

Use interfaces where appropriate (Map<Integer, Integer> map = new HashMap<>()). You donxe2x80x99t need any HashMap-specific behavior after declaration.

Use whitespace consistently and idiomatically. There should be a space before a {, between if and (, and after a ,.

Your algorithm uses more space than you need to. This problem can be solved in O(n) time with O(1) space. Keep a leading pointer and a trailing pointer, with the leading pointer k steps ahead. When the leading pointer hits the end, the trailing pointer points to the desired node.

If you were to apply all my suggestions, your code might look more like:

public static int getKthToLastElement(final LinkedListNode head, final int k) {     if ((head == null) || (k < 0)) {         return -1;     }      LinkedListNode leadingPointer = head;     for (int i = 0; i < k; i++) {         leadingPointer = leadingPointer.getNext();         if (leadingPointer == null) {             return -1;         }     }      LinkedListNode trailingPointer = head;      while (leadingPointer.hasNext()) {         leadingPointer = leadingPointer.getNext();         trailingPointer = trailingPointer.getNext();     }      return trailingPointer.getData(); } 
 
 
 
 

Relacionados problema

0  Base de datos de estudiantes  ( Database of students ) 
Al principio, tuve 9988777665544332 para contener std::list<Student> students , pero como hay más de 2000 estudiantes, la búsqueda de estudiantes no debe h...

7  Holding registros utilizando diccionario  ( Holding records using dictionary ) 
¿Puedes por favor ayudarme con el siguiente script? En este momento, el script está tomando hasta 20 minutos para ejecutar, dependiendo de la cantidad de da...

3  Compara los dictos y récord de cambios  ( Compare dicts and record changes ) 
Mi objetivo es actualizar continuamente un objeto y registrar cualquier cambio y las veces que se hicieron. La entrada debe ser JSON, pero el formato de salid...

4  Un programa para mostrar, actualizar y guardar un diccionario como .csv  ( A program to display update and save a dictionary as csv ) 
Ahora estoy buscando comentarios en v2.0 de este programa en su lugar. Me gustaría algunos comentarios sobre mi código. ¿Qué malos hábitos tengo? ¿Qué c...

0  Acelerar el código basado en el mapa con vectores como valores  ( Speed up code based on map with vectors as values ) 
Siguiendo es la pieza de código que representa el cuello de botella de mi aplicación: #include <iostream> #include <chrono> #include <unordered_map> #inclu...

6  Hosth de descarga en columnas  ( Dump hash in columns ) 
Intenté responder a la pregunta "¿Cómo imprimir un hash en Perl, de modo que se imprimen 3 pares de valor clave en cada línea? " como este . Como obtuve u...

4  Encuentra y reemplaza la optimización del método  ( String find and replace method optimization ) 
Estoy tratando de encontrar una cadena de encabezado específica de diferentes mapas ( 9988777665544330 , LEDES98BIheaders1 y LEDES98BI_V2headers ) En un e...

5  Finanzas familiares - seguimiento e informes  ( Family finances tracking and reporting ) 
Estoy buscando una forma limpia de acumular montos dentro de un conjunto de datos de entrada. En este ejemplo, hay 18 filas de datos, y la salida es de 3 fila...

2  Tabla hash implementada por JavaScript  ( Hash table implemented by javascript ) 
Recientemente intenté implementar una tabla simple usando JavaScript. ¿Alguien podría ayudarme a revisar mi implementación? AssetClass6 En mi implement...

5  Producto cartesiano de Python en un dictnario limitado  ( Python cartesian product in a constrained dictonary ) 
Quiero calcular el producto cartesiano de n Copias de una lista pequeña, 9988777665544331 . Quiero usar estas tites de productos cartesianos como llaves en...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos