Dada una matriz n de enteros y un objetivo nums de destino, si hay cuatro elementos a, b, c, y la determinación d nums, un una adecuada + b + c + d es igual al valor del objetivo? Identificar todas satisfacer las condiciones del quad y no repita.
Y los tres-número de las mismas ideas. Los primeros dos números de dos ciclos, después de atravesar tanto a través de punteros. En el marco general del ciclo, después de un recorrido de código puntero bien, añadir una condición para aumentar la velocidad de desplazamiento, y una falta de énfasis.
- Si menos de cuatro matriz de entrada, puede devolver una cadena vacía
- Cuando i ciclo, puede determinar si el nums [i] y nums [i-1] son iguales, son iguales, se pueden saltar porque esta situación atravesada
- Cuando el ciclo i, el mínimo puede ser determinado si el número de cuatro y tiene más de destino, si es mayor que, menos probable que se describirá más adelante está satisfecho, dirigir el extremo del ciclo, el resultado devuelto
- Del mismo modo, en el ciclo j, sino que también determina si hay los nums [j] y nums [j-1] es igual al caso en el
- Adecuado atravesar el puntero, pero también igual al número de cada se determina bajo estrecha si el puntero R y L
Enviar código
import java.util.*;
import static java.lang.Math.min;
public class leetcode {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
String str = scan.nextLine();
int[] nums = new int[n];
for(int i = 0; i < n; i++) {
nums[i] = scan.nextInt();
}
int target = scan.nextInt();
List result = fourSum(nums, target);
System.out.println(result);
}
public static List<List<Integer>> fourSum(int[] nums, int target) {
List<List<Integer>> ans = new ArrayList<>();
int len = nums.length;
if(nums == null || len < 4) return ans;
Arrays.sort(nums);
for(int i = 0; i<len-3 ; i++) {
if( i>0 && nums[i] == nums[i-1]) continue;
if(nums[i]+nums[i+1]+nums[i+2]+nums[i+3] > target) break;
for(int j = i+1; j<len-2; j++) {
if( j>i+1 && nums[j] == nums[j-1]) continue;
int L = j + 1;
int R = len - 1;
while(L < R) {
int sum = nums[i] + nums[j] + nums[L] + nums[R];
if(sum == target) {
ans.add(Arrays.asList(nums[i],nums[j],nums[L],nums[R]));
while (L < R && nums[L] == nums[L+1]) L++;
while (L < R && nums[R] == nums[R-1]) R--;
L++;
R--;
}
else if (sum - target < 0) L++;
else if (sum - target > 0) R--;
}
}
}
return ans;
}
}