[Li Buckle] 15. Suma de tres números <Manos dobles>

[Likou] 15. Suma de tres números

Dada una matriz de números enteros, determine si hay un triple [nums[i], nums[j], nums[k]]que la satisfaga i != j、i != k 且 j != ky también la satisfaga nums[i] + nums[j] + nums[k] == 0. Devuelva todos los triples no duplicados cuya suma sea 0. Nota: Las respuestas no pueden contener triples duplicados.

Ejemplo 1:
Entrada: nums = [-1,0,1,2,-1,-4]
Salida: [[-1,-1,2],[-1,0,1]]
Explicación:
nums[0 ] + números[1] + números[2] = (-1) + 0 + 1 = 0.
números[1] + números[2] + números[4] = 0 + 1 + (-1) = 0 .
números[0] + números[3] + números[4] = (-1) + 2 + (-1) = 0 .
Los diferentes triples son [-1,0,1] y [-1,-1,2].
Tenga en cuenta que el orden de la salida y el orden de los triples no importan.

Ejemplo 2:
Entrada: nums = [0,1,1]
Salida: []
Explicación: La única suma posible de triples no es 0.

Ejemplo 3:
Entrada: nums = [0,0,0]
Salida: [[0,0,0]]
Explicación: La única suma posible de triples es 0.

Siguiente:
3 <= nums.length <= 3000
- 1 0 5 10^51 05 <= números[i] <=1 0 5 10^51 05

respuesta

Primero ordene la matriz, arregle la primera, use punteros dobles para señalar la siguiente y la última, y ​​juzgue una por una.
Utilice Set para eliminar duplicados

import java.util.*;

public class Main {
    
    
    public static void main(String[] args) {
    
    

        int[] nums = {
    
    -1,0,1,2,-1,-4};
        Arrays.sort(nums);
        Set<List<Integer>> set = new HashSet<>();

        for (int i = 0; i < nums.length; i++) {
    
    
            if (nums[i] > 0) {
    
    
                break;
            }
            int left = i + 1;
            int right = nums.length - 1;
            while (right > left) {
    
    
                int sum = nums[i] + nums[left] + nums[right];

                if (sum > 0) {
    
    
                    right--;
                }
                else if (sum < 0) {
    
    
                    left++;
                }
                else {
    
    
                    set.add(Arrays.asList(nums[i], nums[left], nums[right]));
                    right--;
                    left++;
                }
            }
        }
        
        List<List<Integer>> resultList = new ArrayList<>(set);
        System.out.println(resultList);
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_44033208/article/details/132677555
Recomendado
Clasificación