Sword se refiere a la oferta 57. Y dos números para el análisis S y el código [Java]
1. Título
Ingrese una matriz ascendente y un número S, y encuentre dos números en la matriz de modo que su suma sea exactamente S. Si la suma de varios pares de números es igual a S, genere el producto más pequeño de los dos números.
Descripción de salida:
Corresponde a cada caso de prueba, salida dos números, el número más pequeño se emite primero.
Dos, análisis y código
1. Doble puntero
(1) Pensando
Diseñe dos punteros en ambos extremos de la matriz. Si la suma de los números correspondientes es menor que S, mueva el puntero de la cabeza hacia atrás, de lo contrario, mueva el puntero de cola hacia adelante hasta que se encuentren dos números o punteros que sumen S.
La suma es dos números de S. Cuanto mayor es la distancia, menor es el producto. Por lo tanto, el primer par de números encontrado por el método anterior es la solución.
(2) Código
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> ans = new ArrayList<>();
if (array == null || array.length < 2)
return ans;
int l = 0, r = array.length - 1;
while (l < r && (array[l] + array[r] != sum)) {
if (array[l] + array[r] < sum)
l++;
else
r--;
}
if (l != r) {
ans.add(array[l]);
ans.add(array[r]);
}
return ans;
}
}
(3) Resultados
Tiempo de ejecución: 16ms, memoria ocupada: 9308k.
Tres, otro
Nada.