Skip to content

Commit c0bf743

Browse files
committed
add mathutil
1 parent b48f284 commit c0bf743

File tree

2 files changed

+96
-26
lines changed

2 files changed

+96
-26
lines changed

Diff for: lib/utils/MathUtil.java

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package javaToolkit.lib.utils;
2+
3+
import java.math.BigInteger;
4+
5+
public class MathUtil {
6+
7+
public static BigInteger binomial(int N, int K) {
8+
BigInteger ret = BigInteger.ONE;
9+
for (int k = 0; k < K; k++) {
10+
ret = ret.multiply(BigInteger.valueOf(N - k)).divide(BigInteger.valueOf(k + 1));
11+
}
12+
return ret;
13+
}
14+
15+
}

Diff for: lib/utils/RandomUtil.java

+81-26
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,97 @@
11
package javaToolkit.lib.utils;
22

33
import java.util.ArrayList;
4+
import java.util.HashSet;
45
import java.util.List;
56
import java.util.Random;
7+
import java.util.Set;
68

79
public class RandomUtil {
810

9-
public Object getARandomElement(List<?> givenList) {
10-
Random rand = new Random();
11-
Object randomElement = givenList.get(rand.nextInt(givenList.size()));
12-
return randomElement;
13-
}
11+
public Object getARandomElement(List<?> givenList) {
12+
Random rand = new Random();
13+
Object randomElement = givenList.get(rand.nextInt(givenList.size()));
14+
return randomElement;
15+
}
1416

17+
public List<Object> randomSelectWithRepeat(List<Object> givenList, int numberOfElements) {
18+
Random rand = new Random();
19+
List<Object> selectedEles = new ArrayList<>();
1520

16-
public List<Object> randomSelectWithRepeat(List<Object> givenList, int numberOfElements) {
17-
Random rand = new Random();
18-
List<Object> selectedEles = new ArrayList<>();
21+
for (int i = 0; i < numberOfElements; i++) {
22+
int randomIndex = rand.nextInt(givenList.size());
23+
Object randomElement = givenList.get(randomIndex);
24+
selectedEles.add(randomElement);
25+
}
1926

20-
for (int i = 0; i < numberOfElements; i++) {
21-
int randomIndex = rand.nextInt(givenList.size());
22-
Object randomElement = givenList.get(randomIndex);
23-
selectedEles.add(randomElement);
24-
}
27+
return selectedEles;
28+
}
2529

26-
return selectedEles;
27-
}
30+
public List<?> randomSelectWithoutRepeat(List<?> givenList, int numberOfElements) {
31+
Random rand = new Random();
32+
List<Object> selectedEles = new ArrayList<>();
2833

29-
public List<?> randomSelectWithoutRepeat(List<?> givenList, int numberOfElements) {
30-
Random rand = new Random();
31-
List<Object> selectedEles = new ArrayList<>();
34+
for (int i = 0; i < numberOfElements; i++) {
35+
int randomIndex = rand.nextInt(givenList.size());
36+
Object randomElement = givenList.get(randomIndex);
37+
selectedEles.add(randomElement);
38+
givenList.remove(randomIndex);
39+
}
3240

33-
for (int i = 0; i < numberOfElements; i++) {
34-
int randomIndex = rand.nextInt(givenList.size());
35-
Object randomElement = givenList.get(randomIndex);
36-
selectedEles.add(randomElement);
37-
givenList.remove(randomIndex);
38-
}
41+
return selectedEles;
42+
}
43+
44+
/**
45+
* include max and min
46+
*
47+
* @param min
48+
* @param max
49+
* @param k
50+
* @return
51+
*/
52+
public static Set<Integer> randomGenerateKDistinctNumbers(int min, int max, int k) {
53+
Random rand = new Random();
54+
Set<Integer> selectedEles = new HashSet<>();
55+
56+
if (max - min < k) {
57+
System.out.printf("Cannot generate %s between %s and %s\n", k, min, max);
58+
System.exit(0);
59+
}
60+
61+
while (selectedEles.size() < k) {
62+
int randomNum = rand.nextInt((max - min) + 1) + min;
63+
selectedEles.add(randomNum);
64+
}
65+
66+
return selectedEles;
67+
}
68+
69+
/**
70+
* include max and min, not contain
71+
*
72+
* @param min
73+
* @param max
74+
* @param k
75+
* @return
76+
* @throws Exception
77+
*/
78+
public static Set<Integer> randomKDistinctNumsWithoutSpecificNum(int min, int max, int k, int withoutNum) throws Exception {
79+
Random rand = new Random();
80+
Set<Integer> selectedEles = new HashSet<>();
81+
82+
if (max - min < k) {
83+
System.out.printf("Cannot generate %s between %s and %s\n", k, min, max);
84+
throw new Exception("Cannot generate " + k + " between " + min + " and " + max + "\n");
85+
}
86+
87+
while (selectedEles.size() < k) {
88+
int randomNum = rand.nextInt((max - min) + 1) + min;
89+
if (randomNum != withoutNum) {
90+
selectedEles.add(randomNum);
91+
}
92+
}
93+
94+
return selectedEles;
95+
}
3996

40-
return selectedEles;
41-
}
4297
}

0 commit comments

Comments
 (0)