Find Missing Number in Java (5 Best Methods) | Java 8 Stream Interview Question
✔ Sum Formula Method ✔ IntStream.rangeClosed() ✔ HashSet Optimization ✔ Reduce Method ✔ Frequency Map Technique
|
|
|
import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.IntStream; public class FindMissingNumber { public static void main(String[] args) { List<Integer> list = Arrays.asList(1,2,3,4,6,7,8); int n = list.size() + 1;
// Solution 1: Using Sum Formula: int expectedSum = n * (n + 1)/2; int actualSum = list.stream() .mapToInt(Integer::intValue) .sum();
System.out.println("Missing Number : "+ (expectedSum - actualSum));
// Solution 2: Using List and IntStream Class int missingNum = IntStream.rangeClosed(1, n) .filter(num -> !list.contains(num)) .findFirst() .orElse(-1);
System.out.println("Missing Numer using List: "+ missingNum);
// Solution 3 Using HashSet Set<Integer> set = new HashSet<>(list); missingNum = IntStream.rangeClosed(1, n) .filter(num -> !set.contains(num)) .findFirst() .orElse(-1);
System.out.println("Missing Numer using Set: "+ missingNum);
// Solution 4 Using Reduce MEthod expectedSum = IntStream.rangeClosed(1, n).sum();
actualSum = list.stream() .reduce(0, Integer::sum);
System.out.println("Missing Number using reduce method: "+ (expectedSum - actualSum));
// Solution 5 : Using HashMap Map<Integer, Long> map = list.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
missingNum = IntStream.rangeClosed(1, n) .filter(num -> !map.containsKey(num)) .findFirst() .orElse(-1);
System.out.println("Missing Numer using HashMap: "+ missingNum);
} } |
0 Comments