/**
* 高效的获取min到max范围内的count个不重复的数字
*
* @param min
* @param max
* @param count
* @return
*/
public static List<Integer> getNoRepeatRandomNum(int min, int max, int count) {
if (max - min < 1) {
return null;
}
List<Integer> init = new ArrayList<>();
for (int i = min; i <= max; i++) {
init.add(i);
}
if (max - min <= count) {
return init;
}
List<Integer> list = new ArrayList<>();
boolean isReverse = false;
//如果目标个数大于最大-最小的一半,则反转过来
if (count > (max - min) / 2) {
isReverse = true;
count = max - min - count;
}
for (int i = 0; i < count; i++) {
int r = (int) (Math.random() * init.size());
list.add(init.get(r));
init.remove(r);
}
if (isReverse) {
return init;
}
return list;
}
高效的获取min到max范围内的count个不重复的数字
最新推荐文章于 2023-06-05 16:30:31 发布