mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-25 05:22:39 +08:00
Close Scanner
to avoid resource leak (#5077)
This commit is contained in:
@ -10,61 +10,70 @@ import java.util.Scanner;
|
||||
public class NonRepeatingElement {
|
||||
|
||||
public static void main(String[] args) {
|
||||
Scanner sc = new Scanner(System.in);
|
||||
int i, res = 0;
|
||||
System.out.println("Enter the number of elements in the array");
|
||||
int n = sc.nextInt();
|
||||
if ((n & 1) == 1) {
|
||||
// Not allowing odd number of elements as we are expecting 2 non repeating numbers
|
||||
System.out.println("Array should contain even number of elements");
|
||||
return;
|
||||
}
|
||||
int[] arr = new int[n];
|
||||
|
||||
System.out.println("Enter " + n + " elements in the array. NOTE: Only 2 elements should not repeat");
|
||||
for (i = 0; i < n; i++) {
|
||||
arr[i] = sc.nextInt();
|
||||
}
|
||||
|
||||
try {
|
||||
sc.close();
|
||||
} catch (Exception e) {
|
||||
System.out.println("Unable to close scanner" + e);
|
||||
}
|
||||
|
||||
// Find XOR of the 2 non repeating elements
|
||||
for (i = 0; i < n; i++) {
|
||||
res ^= arr[i];
|
||||
}
|
||||
|
||||
// Finding the rightmost set bit
|
||||
res = res & (-res);
|
||||
int num1 = 0, num2 = 0;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if ((res & arr[i]) > 0) { // Case 1 explained below
|
||||
num1 ^= arr[i];
|
||||
} else {
|
||||
num2 ^= arr[i]; // Case 2 explained below
|
||||
try (Scanner sc = new Scanner(System.in)) {
|
||||
int i, res = 0;
|
||||
System.out.println("Enter the number of elements in the array");
|
||||
int n = sc.nextInt();
|
||||
if ((n & 1) == 1) {
|
||||
// Not allowing odd number of elements as we are expecting 2 non repeating
|
||||
// numbers
|
||||
System.out.println("Array should contain even number of elements");
|
||||
return;
|
||||
}
|
||||
}
|
||||
int[] arr = new int[n];
|
||||
|
||||
System.out.println("The two non repeating elements are " + num1 + " and " + num2);
|
||||
sc.close();
|
||||
System.out.println("Enter " + n + " elements in the array. NOTE: Only 2 elements should not repeat");
|
||||
for (i = 0; i < n; i++) {
|
||||
arr[i] = sc.nextInt();
|
||||
}
|
||||
|
||||
try {
|
||||
sc.close();
|
||||
} catch (Exception e) {
|
||||
System.out.println("Unable to close scanner" + e);
|
||||
}
|
||||
|
||||
// Find XOR of the 2 non repeating elements
|
||||
for (i = 0; i < n; i++) {
|
||||
res ^= arr[i];
|
||||
}
|
||||
|
||||
// Finding the rightmost set bit
|
||||
res = res & (-res);
|
||||
int num1 = 0, num2 = 0;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if ((res & arr[i]) > 0) { // Case 1 explained below
|
||||
num1 ^= arr[i];
|
||||
} else {
|
||||
num2 ^= arr[i]; // Case 2 explained below
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("The two non repeating elements are " + num1 + " and " + num2);
|
||||
sc.close();
|
||||
}
|
||||
}
|
||||
/*
|
||||
Explanation of the code:
|
||||
let us assume we have an array [1,2,1,2,3,4]
|
||||
Property of XOR: num ^ num = 0.
|
||||
If we XOR all the elemnets of the array we will be left with 3 ^ 4 as 1 ^ 1 and 2 ^ 2 would give
|
||||
0. Our task is to find num1 and num2 from the result of 3 ^ 4 = 7. We need to find two's
|
||||
complement of 7 and find the rightmost set bit. i.e. (num & (-num)) Two's complement of 7 is 001
|
||||
and hence res = 1. There can be 2 options when we Bitise AND this res with all the elements in our
|
||||
array
|
||||
1. Result will come non zero number
|
||||
2. Result will be 0.
|
||||
In the first case we will XOR our element with the first number (which is initially 0)
|
||||
In the second case we will XOR our element with the second number(which is initially 0)
|
||||
This is how we will get non repeating elements with the help of bitwise operators.
|
||||
* Explanation of the code:
|
||||
* let us assume we have an array [1,2,1,2,3,4]
|
||||
* Property of XOR: num ^ num = 0.
|
||||
* If we XOR all the elemnets of the array we will be left with 3 ^ 4 as 1 ^ 1
|
||||
* and 2 ^ 2 would give
|
||||
* 0. Our task is to find num1 and num2 from the result of 3 ^ 4 = 7. We need to
|
||||
* find two's
|
||||
* complement of 7 and find the rightmost set bit. i.e. (num & (-num)) Two's
|
||||
* complement of 7 is 001
|
||||
* and hence res = 1. There can be 2 options when we Bitise AND this res with
|
||||
* all the elements in our
|
||||
* array
|
||||
* 1. Result will come non zero number
|
||||
* 2. Result will be 0.
|
||||
* In the first case we will XOR our element with the first number (which is
|
||||
* initially 0)
|
||||
* In the second case we will XOR our element with the second number(which is
|
||||
* initially 0)
|
||||
* This is how we will get non repeating elements with the help of bitwise
|
||||
* operators.
|
||||
*/
|
||||
}
|
||||
|
Reference in New Issue
Block a user