Find the unique number

Find the unique number

مساله:

آرایه ای از اعداد داریم که در آن تمام اعداد به جز یکی با هم برابر است. سعی کنید آنرا پیدا کنید.

Kata.findUniq(new double[]{ 1, 1, 1, 2, 1, 1 }); // => 2
Kata.findUniq(new double[]{ 0, 0, 0.55, 0, 0 }); // => 0.55

ما تضمین می کنیم که آرایه حداقل ۳ عدد داشته باشد.

در تست ها آرایه ها بسیار بزرگ هستند پس به عملکرد تابع دقت کنید.

Description:

There is an array with some numbers. All numbers are equal except for one. Try to find it!

Kata.findUniq(new double[]{ 1, 1, 1, 2, 1, 1 }); // => 2
Kata.findUniq(new double[]{ 0, 0, 0.55, 0, 0 }); // => 0.55

It’s guaranteed that array contains at least 3 numbers.

The tests contain some very huge arrays, so think about performance.


import java.util.Arrays;
 public class Kata {
    public static double findUniq(double[] arr) {
      	Arrays.parallelSort(arr);
		if (arr[0] != arr[1])
			return arr[0];
		return arr[arr.length - 1];
    }
}
import java.util.Arrays;
 public class Kata {
    public static double findUniq(double[] arr) {
      Arrays.sort(arr);
      return arr[0] == arr[1] ? arr[arr.length-1]:arr[0];
    }
}
public class Kata {
  public static double findUniq(double arr[]) {
    final double x = arr[arr[0] == arr[1] ? 0 : 2];
    for (double y : arr)
      if (y != x)
        return y;
    throw new RuntimeException("no unique number found");
  }
}
import java.util.Arrays;
import java.util.Map.Entry;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;

class Kata {
    static double findUniq(final double[] array) {
        return Arrays.stream(array).boxed()
                .collect(groupingBy(identity(), counting()))
                .entrySet().stream()
                .filter(e -> e.getValue() == 1)
                .findFirst()
                .map(Entry::getKey)
                .orElse(0.0);
    }
}
import java.util.*;

// Make sure your class is public
public class Kata {
    public static double findUniq(double arr[]) {
        HashMap<Double, Integer> doubleMap = new HashMap<Double, Integer>();
        //Put all array element in a hashmap
        for (double i : arr) {
            if (doubleMap.get(i) == null) {
                doubleMap.put(i, 1);
                continue;
            }
            doubleMap.put(i, doubleMap.get(i) + 1);
        }
        //Find the matching element
        for (Map.Entry<Double, Integer> i : doubleMap.entrySet()) {
            if (i.getValue() == 1)
                return i.getKey();
        }
    throw new RuntimeException("no unique number found");
    }
}

دیدگاهتان را بنویسید