1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| package days;
import java.util.HashSet; import java.util.Set;
public class _2829k_avoiding数组的最小总和 {
public int minimumSum_gov(int n, int k) { if (n <= k / 2) { return arithmeticSeriesSum(1, 1, n); } else { return arithmeticSeriesSum(1, 1, k / 2) + arithmeticSeriesSum(k, 1, n - k / 2); } }
private int arithmeticSeriesSum(int a1, int d, int n) { return (a1 + a1 + (n - 1) * d) * n / 2; }
public int minimumSum_math(int n, int k) { int half = k / 2; if (n <= half) { return continuousMonotonicSummation(1, n); } else { return continuousMonotonicSummation(1, half) + continuousMonotonicSummation(k, k + n - half - 1); } }
private int continuousMonotonicSummation(int start, int end) { return (end - start + 1) * (end + start) / 2; }
public int minimumSum_set(int n, int k) { Set<Integer> set = new HashSet<>(); int idx = 1; while (set.size() < n) { if (!set.contains(k - idx)) { set.add(idx); } idx++; } int res = 0; for (Integer i : set) { res += i; } return res; }
public static void main(String[] args) { _2829k_avoiding数组的最小总和 avoiding = new _2829k_avoiding数组的最小总和(); System.out.println(avoiding.minimumSum_math(5, 4)); System.out.println(avoiding.minimumSum_math(2, 6)); System.out.println(avoiding.minimumSum_math(2, 1)); }
}
|