Categorías
Algorithms

LeetCode – 3Sum Closest (Java)

Dada una matriz S de n enteros, encuentre tres enteros en S tales que la suma esté más cerca de un número dado, objetivo. Devuelve la suma de los tres números enteros. Puede suponer que cada entrada tendría exactamente una solución.

For example, given array S = {-1 2 1 -4}, and target = 1. 
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

Análisis

Este problema es similar a 2 Sum. Este tipo de problema puede resolverse utilizando un enfoque similar, es decir, dos punteros de izquierda y derecha.

Solución Java

public int threeSumClosest(int[] nums, int target) {
    int min = Integer.MAX_VALUE;
	int result = 0;
 
	Arrays.sort(nums);
 
	for (int i = 0; i < nums.length; i++) {
		int j = i + 1;
		int k = nums.length - 1;
		while (j < k) {
			int sum = nums[i] + nums[j] + nums[k];
			int diff = Math.abs(sum - target);
 
			if(diff == 0) return sum;
 
			if (diff < min) {
				min = diff;
				result = sum;
			}
			if (sum <= target) {
				j++;
			} else {
				k--;
			}
		}
	}
 
	return result;
}

La complejidad del tiempo es O (n ^ 2).

  LeetCode - Fusionar matriz ordenada (Java)

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *