¿Cómo puedo disminuir el uso de la memoria de mi solución a LeetCode 495: TEEMO ATACTOR -- java camp codereview Relacionados El problema

How do I lessen the memory usage of my solution to LeetCode 495: Teemo Attacking


5
vote

problema

Español

Cómo hacer cambios en mi código para que pueda tomar la menor memoria posible. Este es un programa de leetcode, he probado todos los testcases y ha pasado, intenté reducir el uso de la memoria, pero, con mucho, ahora, no he podido entender.

Quiero investigar esto para que pueda entender mejor el uso de los espacios de memoria. Cualquier entrada sería útil. Muchas gracias. También publicaré el enlace a la pregunta, pero como la lógica ya está clara para mí, la única pregunta es que es esta una buena solución o memoria pesada?

     class Solution {     public int findPoisonedDuration(int[] timeSeries, int duration) {                  int i =0,old_goalpost=0,new_goalpost=0 ,diff=0;                 int numberOfSeconds = duration;                 if (timeSeries.length >0)             old_goalpost = timeSeries[0]+duration-1;         else             numberOfSeconds=0;                  if (timeSeries.length >0)         for (i=1;i<timeSeries.length;i++)                     {             new_goalpost =  timeSeries[i]+duration-1;                           diff = (new_goalpost - old_goalpost)>duration?duration:((new_goalpost - old_goalpost));                                       numberOfSeconds = numberOfSeconds +diff;             old_goalpost = new_goalpost;                      }         return numberOfSeconds;              } }   

La pregunta es esta ingrese la descripción de la imagen aquí

y ha pasado todos los casos de prueba.

ingrese la descripción de la imagen aquí

Si lo desea, este es el enlace a la pregunta https://leetcode.com/problems/teemo-Attacking/

Este código es 99.97% más rápido pero de memoria pesada

  class Solution {     public int findPoisonedDuration(int[] timeSeries, int duration) {                  int i =0,old_goalpost=0,new_goalpost=0 ,diff=0;                 int numberOfSeconds = duration;                 if (timeSeries.length >0)             old_goalpost = timeSeries[0]+duration-1;         else             numberOfSeconds=0;                  if (timeSeries.length >0)         for (i=1;i<timeSeries.length;i++)                     {             new_goalpost =  timeSeries[i]+duration-1;                              diff = (new_goalpost - old_goalpost)>duration?duration:((new_goalpost - old_goalpost));              numberOfSeconds = numberOfSeconds +diff;             old_goalpost = new_goalpost;                      }         return numberOfSeconds;              } }   

ingrese la descripción de la imagen aquí

Original en ingles

How to make changes in my code so that it can take the least memory possible.? This is a leetcode program , I have tested all the testcases and it has passed, I tried to reduce the memory usage, but by far now, I have not been able to understand.

I want to look into this so that I can understand the usage of memory spaces better. Any input would be helpful. Thank you very much. I will also post the link to the question, but since the logic is already clear to me, The only question is that is this a good solution or memory heavy?

   class Solution {     public int findPoisonedDuration(int[] timeSeries, int duration) {                  int i =0,old_goalpost=0,new_goalpost=0 ,diff=0;                 int numberOfSeconds = duration;                 if (timeSeries.length >0)             old_goalpost = timeSeries[0]+duration-1;         else             numberOfSeconds=0;                  if (timeSeries.length >0)         for (i=1;i<timeSeries.length;i++)                     {             new_goalpost =  timeSeries[i]+duration-1;                           diff = (new_goalpost - old_goalpost)>duration?duration:((new_goalpost - old_goalpost));                                       numberOfSeconds = numberOfSeconds +diff;             old_goalpost = new_goalpost;                      }         return numberOfSeconds;              } } 

the question is this enter image description here

And it has passed all the test cases.

enter image description here

If you want, this is the link to the question https://leetcode.com/problems/teemo-attacking/

this code is 99.97% faster but memory heavy

class Solution {     public int findPoisonedDuration(int[] timeSeries, int duration) {                  int i =0,old_goalpost=0,new_goalpost=0 ,diff=0;                 int numberOfSeconds = duration;                 if (timeSeries.length >0)             old_goalpost = timeSeries[0]+duration-1;         else             numberOfSeconds=0;                  if (timeSeries.length >0)         for (i=1;i<timeSeries.length;i++)                     {             new_goalpost =  timeSeries[i]+duration-1;                              diff = (new_goalpost - old_goalpost)>duration?duration:((new_goalpost - old_goalpost));              numberOfSeconds = numberOfSeconds +diff;             old_goalpost = new_goalpost;                      }         return numberOfSeconds;              } } 

enter image description here

  
   
   

Lista de respuestas

3
 
vote

Descargo de responsabilidad: No es un revisor de código

  • Acaba de probar su código, tiene un 998877766555443314 RUNNIME CON initialize5 más rápido que otras soluciones.

    ingrese la descripción de la imagen aquí

  • No preste demasiada atención a estos datos de tiempo de ejecución / memoria proporcionados por LeetCode, especialmente cuando:

    • se trata de la memoria; o
    • Los casos de prueba
    • son demasiado limitados (como Teemo) porque sus evaluaciones de referencia no son tan precisas.
  • Tal vez en su lugar, formatearíamos el código, solo un poco haciendo cosas basadas en las convenciones de Java:

  initialize6  

  • Su solución tiene un orden de tiempo de ejecución con memoria constante O (1).
  • hablando algoritímicamente, que es un punto clave sobre la resolución de preguntas de leetcode, no creo que se pueda hacer mucho para que sea más eficiente, podría estar equivocado aunque.
  initialize7  
 

Disclaimer: Not a Code Reviewer

  • Just tested your code, it has a 1ms runtime with 99.97% faster than other solutions.

    enter image description here

  • Don't pay too much attention to these runtime/memory data provided by LeetCode especially when:

    • it comes to memory; or
    • test cases are too limited (such as Teemo) because their benchmarkings are not so accurate.
  • Maybe instead we'd format the code, just a bit making things based on Java's conventions:

public class Solution {     public static final int findPoisonedDuration(         final int[] timeSeries,         final int duration     ) {          int i = 0;         int oldGoalpost = 0;         int newGoalpost = 0;         int diff = 0;         int numberOfSeconds = duration;          if (timeSeries.length > 0) {             oldGoalpost = timeSeries[0] + duration - 1;          } else {             numberOfSeconds = 0;         }          if (timeSeries.length > 0)             for (i = 1; i < timeSeries.length; i++) {                 newGoalpost =  timeSeries[i] + duration - 1;                  diff = (newGoalpost - oldGoalpost) > duration ? duration : ((newGoalpost - oldGoalpost));                   numberOfSeconds = numberOfSeconds + diff;                 oldGoalpost = newGoalpost;              }          return numberOfSeconds;      } } 

  • Your solution has an order of N runtime with constant memory O(1).
  • Algorithmically speaking, which is a key point on solving LeetCode questions, I don't think much can be done to make it any further efficient, I might be wrong though.
public class Solution {     public static final int findPoisonedDuration(         final int[] series,         final int duration     ) {         if (series.length == 0 || duration == 0) {             return 0;         }          int totalTime = duration;          for (int i = 1; i < series.length; i++) {             totalTime += Math.min(series[i] - series[i - 1], duration);         }          return totalTime;     } }  
 
 

Relacionados problema

5  Encuentre el próximo número Prime - Control de flujo de los bucles anidados 'para `  ( Find the next prime number flow control of nested for loops ) 
Este código funciona perfectamente, pero me molesta. Tener un bucle etiquetado y anidado Bucle, con un Enumerable<T>.Empty()0 Declaración, y un 9988777665...

17  Implementación vectorial (física)  ( Vector physics implementation ) 
Recientemente comencé a aprender Java, y decidí implementar un sistema de vectores básico para otro sistema de partículas que estaba construyendo. join()9 ...

2  Eliminación de un nodo en un árbol de búsqueda binario  ( Deletion of a node in a binary search tree ) 
Estoy buscando ver si mi implementación del método de eliminación / eliminación en un árbol de búsqueda binario es suficiente, legible y se ejecuta en un tiem...

8  Simple GCD Utility en Java  ( Simple gcd utility in java ) 
i anteriormente discutido El rendimiento se refiere a diferentes algoritmos GCD. Escribí una simple clase de Java que implementa el algoritmo binario GCD. E...

2  Fusionar la implementación de Sort Java  ( Merge sort java implementation ) 
¿Puede alguien revisar mi implementación de tipo de fusión en Java? ¿Es bueno / malo y puede mejorarse más? public class MyMergeSort { private int [] d...

6  Encontrar el siguiente palíndromo de una cadena de números  ( Finding the next palindrome of a number string ) 
Aquí está el problema: Un entero positivo se llama palíndromo si su representación en el El sistema decimal es el mismo cuando se lee de izquierda a dere...

5  Memoria / Performance of Merge Sort Code  ( Memory performance of merge sort code ) 
Escribí un código de tipo de combinación para un poco de bocadillo nocturno. Lo he puesto trabajando, pero solo estaba mirando a aprender si me faltaba algo e...

34  Clon a todo color del juego de la vida de Conway, con una GUI decente  ( Full color clone of conways game of life with a decent gui ) 
Escribí esto para aprender Javafx, y como excusa para volver a hacer el juego de la vida. Esta es la gui más compleja que he escrito, así que me gustaría come...

2  Solucionador de rompecabezas de rascacielos en Java [cerrado]  ( Skyscraper puzzle solver in java ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

1  Compruebe si dos cadenas son permutación entre sí  ( Check if two strings are permutation of each other ) 
private String sort(String word) { char[] content = word.toCharArray(); Arrays.sort(content); return new String(content); } private boolea...




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