Título: Tres de la serie de los más cercanos y
Enlaces: (https://leetcode-cn.com/problems/3sum-closest/)
Esta pregunta y escribir su propio ayer, "tres y el número de" similar, pero personalmente sienten que es más simple que eso. Debido a que no hay una sentencia y eliminación del mismo elemento especial, no es complicado.
idea personal es la siguiente: para grabar el objetivo con una variable ans de diferencia, y luego continúan utilizando dos punteros y una determinación del valor absoluto de la diferencia entre el número de destino de tres, si el valor absoluto es menor que ans ans puede actualizar. Código es el siguiente:
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int ans = 1000000 ;
int len = nums.size();
for(int i = 0; i < len - 2; i++)
{
int L = i + 1, R = len - 1;
while(L < R)
{
int sum = nums[i] + nums[L] + nums[R];
if(sum == target) return target;
else if(sum < target)
{
if(target - sum < abs(ans)) ans = sum - target;
L++;
}
else
{
if(sum - target < abs(ans)) ans = sum - target;
R--;
}
}
}
return ans + target;
}
};
Aplicación de los siguientes:
digresión
valiente es: cuando usted no ha comenzado ya saben que van a perder, pero aún así desea hacerlo, y pegarlo en el final de todos modos. Rara vez se gana, pero a veces.
- Harper Lee