2017-09-05 3 views
0

Interview Question à la grande entreprise: Comment résoudriez-vous? Pour une liste d'entiers arbitraires, trouvez les paires d'entiers qui somme à une somme inconnue attendue. Retourne les résultats du tableau dans une collection.À partir d'entiers arbitraires, trouver des paires qui somme à la somme attendue, retourner les résultats du tableau en tant que collection

C'est ce que je devais partir de:

class NumericalEntityProcessor { 

    List<Integer[]> pairsThatSumToX(List<Integer> input, Integer expectedSum) { 

    } 
} 

Ce sont deux des solutions possibles - mais je manqué quelque chose ...

class NumericalEntityProcessor { 

    List<Integer[]> pairsThatSumToX(List<Integer> input, Integer expectedSum) { 

    int n = list.size() + 2; 
    int expectedSum = n * (n + 1)/2; 
    int expectedSquaredSum = n * (n + 1) * (2 * n + 1)/6; 
    int sum = 0; 
    int squaredSum = 0; 

    System.out.println("SIZE :::" + list.size()); 

    for (Object num : list) { 
     sum = sum + (int)num; 
     squaredSum = squaredSum + ((int)num * (int)num); 
    } 

    int xplusy = expectedSum - sum; 
    int xsquareplusysquare = expectedSquaredSum - squaredSum; 
    int twoxy = xplusy * xplusy - xsquareplusysquare; 
    int xminusy = (int) Math.sqrt(xsquareplusysquare - twoxy); 
    int x = (xplusy + xminusy)/2; 
    int y = (xplusy - xminusy)/2; 

    return new Integer[] { x, y }; 

    int sum = list.stream().map(Line::getLength).collect(Collectors.summingInt(i->i)); 
    } 
} 

Ou, deuxième attempt-

public class ArrayExample1 { 

    public static void main(String[] args) { 

     int[] number = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 

     List<Integer> list = convertIntArrayToList(number); 
     System.out.println("list : " + list); 

    } 

    private static List<Integer> convertIntArrayToList(int[] input) { 

     List<Integer> list = new ArrayList<>(); 
     for (int i : input) { 
      list.add(i); 
     } 
     return list; 
     IntSummaryStatistics stats = list.stream() 
        .collect(Collectors.summarizingInt(Line::getLength)); 
     IntSummaryStatistics stats = list.stream().flatMap(a->Arrays.stream(a)) 
        .collect(Collectors.summarizingInt(i->i)); 
     System.out.println(stats.getSum());  
     } 
    } 
} 

Répondre

0
  1. Trier la liste
  2. Define deux pointeurs, l'un à partir de la tête et incrémenter, l'autre à partir de la queue et décrémenter
  3. Déplacer un pointeur tandis que le total des numéros référencés est inférieure à la cible
  4. Après itération, notez si les chiffres actuels au total la cible
  5. Répétez l'étape 3 avec l'autre pointeur
  6. sortie itération si le total dépasse la cible

en raison du genre, cet algorithme a O (n log n) la complexité du temps. La partie d'itération est O (n), qui est ignorée dans le but de déterminer la complexité globale du temps car elle a un ordre inférieur.