Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
16
Task/Averages-Median/Java/averages-median-1.java
Normal file
16
Task/Averages-Median/Java/averages-median-1.java
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
double median(List<Double> values) {
|
||||
/* copy, as to prevent modifying 'values' */
|
||||
List<Double> list = new ArrayList<>(values);
|
||||
Collections.sort(list);
|
||||
/* 'mid' will be truncated */
|
||||
int mid = list.size() / 2;
|
||||
return switch (list.size() % 2) {
|
||||
case 0 -> {
|
||||
double valueA = list.get(mid);
|
||||
double valueB = list.get(mid + 1);
|
||||
yield (valueA + valueB) / 2;
|
||||
}
|
||||
case 1 -> list.get(mid);
|
||||
default -> 0;
|
||||
};
|
||||
}
|
||||
10
Task/Averages-Median/Java/averages-median-2.java
Normal file
10
Task/Averages-Median/Java/averages-median-2.java
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
public static double median2(List<Double> list) {
|
||||
PriorityQueue<Double> pq = new PriorityQueue<Double>(list);
|
||||
int n = list.size();
|
||||
for (int i = 0; i < (n - 1) / 2; i++)
|
||||
pq.poll(); // discard first half
|
||||
if (n % 2 != 0) // odd length
|
||||
return pq.poll();
|
||||
else
|
||||
return (pq.poll() + pq.poll()) / 2.0;
|
||||
}
|
||||
50
Task/Averages-Median/Java/averages-median-3.java
Normal file
50
Task/Averages-Median/Java/averages-median-3.java
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
@FunctionalInterface
|
||||
interface MedianFinder<T, R> extends Function<Collection<T>, R> {
|
||||
@Override
|
||||
R apply(Collection<T> data);
|
||||
}
|
||||
|
||||
class MedianFinderImpl<T, R> implements MedianFinder<T, R> {
|
||||
private final Supplier<R> ifEmpty;
|
||||
private final Function<T, R> ifOdd;
|
||||
private final Function<List<T>, R> ifEven;
|
||||
|
||||
MedianFinderImpl(Supplier<R> ifEmpty, Function<T, R> ifOdd, Function<List<T>, R> ifEven) {
|
||||
this.ifEmpty = ifEmpty;
|
||||
this.ifOdd = ifOdd;
|
||||
this.ifEven = ifEven;
|
||||
}
|
||||
|
||||
@Override
|
||||
public R apply(Collection<T> data) {
|
||||
return Objects.requireNonNull(data, "data must not be null").isEmpty()
|
||||
? ifEmpty.get()
|
||||
: (data.size() & 1) == 0
|
||||
? ifEven.apply(data.stream().sorted()
|
||||
.skip(data.size() / 2 - 1)
|
||||
.limit(2).toList())
|
||||
: ifOdd.apply(data.stream().sorted()
|
||||
.skip(data.size() / 2)
|
||||
.limit(1).findFirst().get());
|
||||
}
|
||||
}
|
||||
|
||||
public class MedianOf {
|
||||
private static final MedianFinder<Integer, Integer> INTEGERS = new MedianFinderImpl<>(() -> 0, n -> n, pair -> (pair.get(0) + pair.get(1)) / 2);
|
||||
private static final MedianFinder<Integer, Float> INTEGERS_AS_FLOAT = new MedianFinderImpl<>(() -> 0f, n -> n * 1f, pair -> (pair.get(0) + pair.get(1)) / 2f);
|
||||
private static final MedianFinder<Integer, Double> INTEGERS_AS_DOUBLE = new MedianFinderImpl<>(() -> 0d, n -> n * 1d, pair -> (pair.get(0) + pair.get(1)) / 2d);
|
||||
private static final MedianFinder<Float, Float> FLOATS = new MedianFinderImpl<>(() -> 0f, n -> n, pair -> (pair.get(0) + pair.get(1)) / 2);
|
||||
private static final MedianFinder<Double, Double> DOUBLES = new MedianFinderImpl<>(() -> 0d, n -> n, pair -> (pair.get(0) + pair.get(1)) / 2);
|
||||
private static final MedianFinder<BigInteger, BigInteger> BIG_INTEGERS = new MedianFinderImpl<>(() -> BigInteger.ZERO, n -> n, pair -> pair.get(0).add(pair.get(1)).divide(BigInteger.TWO));
|
||||
private static final MedianFinder<BigInteger, BigDecimal> BIG_INTEGERS_AS_BIG_DECIMAL = new MedianFinderImpl<>(() -> BigDecimal.ZERO, BigDecimal::new, pair -> new BigDecimal(pair.get(0).add(pair.get(1))).divide(BigDecimal.valueOf(2), RoundingMode.FLOOR));
|
||||
private static final MedianFinder<BigDecimal, BigDecimal> BIG_DECIMALS = new MedianFinderImpl<>(() -> BigDecimal.ZERO, n -> n, pair -> pair.get(0).add(pair.get(1)).divide(BigDecimal.valueOf(2), RoundingMode.FLOOR));
|
||||
|
||||
public static Integer integers(Collection<Integer> integerCollection) { return INTEGERS.apply(integerCollection); }
|
||||
public static Float integersAsFloat(Collection<Integer> integerCollection) { return INTEGERS_AS_FLOAT.apply(integerCollection); }
|
||||
public static Double integersAsDouble(Collection<Integer> integerCollection) { return INTEGERS_AS_DOUBLE.apply(integerCollection); }
|
||||
public static Float floats(Collection<Float> floatCollection) { return FLOATS.apply(floatCollection); }
|
||||
public static Double doubles(Collection<Double> doubleCollection) { return DOUBLES.apply(doubleCollection); }
|
||||
public static BigInteger bigIntegers(Collection<BigInteger> bigIntegerCollection) { return BIG_INTEGERS.apply(bigIntegerCollection); }
|
||||
public static BigDecimal bigIntegersAsBigDecimal(Collection<BigInteger> bigIntegerCollection) { return BIG_INTEGERS_AS_BIG_DECIMAL.apply(bigIntegerCollection); }
|
||||
public static BigDecimal bigDecimals(Collection<BigDecimal> bigDecimalCollection) { return BIG_DECIMALS.apply(bigDecimalCollection); }
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue