发牌算法
当情况需要等概率的随机分配数据,可以尝试发牌算法(时间复杂度O(n))
for (int i = 0; i < res.length; i++) {
swap(res, i, i + random.nextInt(n - i));
}
思想很简答,就是从头到尾进行遍历,将当前位置与其后随机位置值进行替换,便利完成后就得到相对公平的数据随机分配。
判断循环
循环可以用Set集合的不可重复或递归推值进行判断,但可能由于数据过大导致递归栈溢出或集合过大的问题。
循环通常可以用快慢指针实现,当快慢指针相遇即到了循环起始位置。