patternjavaMinor
Find all single elements in an array
Viewed 0 times
elementsallarraysinglefind
Problem
I am interested in printing all numbers that do not have a match in an array.
Example:
Please review my solution bellow. What would be a much better way for this? Any input on how to improve this is welcome
Example:
1,3,4,5,3,4,5,5,6 result 1,5,6Please review my solution bellow. What would be a much better way for this? Any input on how to improve this is welcome
public static Integer[] outputSinglePair(Integer[] numbers){
if(numbers == null)
throw new IllegalArgumentException();
Arrays.sort(numbers);
ArrayList result = new ArrayList();
for(int i = 0; i < numbers.length - 1; ){
if(numbers[i] != numbers[i + 1]){
result.add(numbers[i]);
i++;
}
else
i+=2;
if(i == numbers.length - 1)result.add(numbers[i]);//we hit last element of array which is unpaired
}
return result.toArray(new Integer[0]);
}Solution
I think this is the sort of thing for which
(Updated to fix syntax errors)
HashSet is perfect. Your implementation would look something like I have shown below. The advantage is that you don't need a sort so your running time is strictly linear.(Updated to fix syntax errors)
public static Integer[] outputSinglePair(Integer[] numbers){
if(numbers == null)
throw new IllegalArgumentException();
HashSet result = new HashSet();
for (int next: numbers) {
if (result.contains(next)) {
result.remove(next);
}
else {
result.add(next);
}
}
return result.toArray(new Integer[result.size()]);
}Code Snippets
public static Integer[] outputSinglePair(Integer[] numbers){
if(numbers == null)
throw new IllegalArgumentException();
HashSet<Integer> result = new HashSet<Integer>();
for (int next: numbers) {
if (result.contains(next)) {
result.remove(next);
}
else {
result.add(next);
}
}
return result.toArray(new Integer[result.size()]);
}Context
StackExchange Code Review Q#12203, answer score: 8
Revisions (0)
No revisions yet.