Estoy tratando de resolver Three Sum (encontrar todos los tripletes que suman 0 dentro de una matriz evitando casos duplicados) pero actualmente me encuentro con un error que parece que no puedo encontrar.
Cuando la entrada es [-1,0,1,2,-1,-4] , funciona bien.
Sin embargo, con esta entrada, [-1,0,1,2,-1,-4,-2,-3,3,0,4] esta matriz como salida:
[[-1,-1,2],[-1,0,1],[-2,0,2],[-3,0,3],[-3,1,2],[-4,0,4],[-4,1,3]] .
La salida correcta debe ser
[[-4,0,4],[-4,1,3],[-3,-1,4],[-3,0,3],[-3,1,2],[-2,-1,3],[-2,0,2],[-1,-1,2],[-1,0,1]]
Entonces, por alguna razón, mi solución es omitir los tripletes [-3,-1,4] y [-2,-1,3] .
var threeSum = function (nums) { const sorted = nums.sort() const output = [] for (let i = 0; i < sorted.length - 2; i++) if (i === 0 || (i > 0 && sorted[i] !== sorted[i - 1])) { let lower = i + 1 let higher = sorted.length - 1 while (lower < higher) { const currentSum = sorted[i] + sorted[lower] + sorted[higher]; if (currentSum === 0) { output.push([sorted[i], sorted[lower], sorted[higher]]) while (sorted[lower] === sorted[lower + 1]) lower++ while (sorted[higher] === sorted[higher - 1]) higher-- lower++ higher-- } else if (currentSum < 0) { lower++ } else { higher-- } } } } return output };Por defecto, Javascript ordena a través de la comparación de cadenas.
Desea ordenar numéricamente, así que use
nums.sort(function(a, b){return a - b});