c - 将随机索引挑选到排序数组中
问题描述
假设我有一个排序的值数组:
int n=4; // always lower or equal than number of unique values in array
int i[256] = {};
int v = {1 1 2 4 5 5 5 5 5 7 7 9 9 11 11 13}
// EX 1 ^ ^ ^ ^
// EX 2 ^ ^ ^ ^
// EX 3 ^ ^ ^ ^
我想生成n 个随机索引值i[0] ... i[n-1]
,以便:
v[i[0]] ... v[i[n-1]]
指向一个唯一的数字(即不能指向 5 两次)- 每个数字必须是同类中最右边的(即必须指向最后5 个)
- 应始终包括对最终数字(在本例中为 13)的索引。
到目前为止我已经尝试过:
- 将索引获取到唯一值的最后一个
- 洗牌索引
- 挑出前 n 个索引
我在 C 中实现这一点,所以我可以依赖的标准 C 函数越多,代码越短越好。(例如,shuffle
不是标准的 C 函数,但如果我必须,我必须。)
解决方案
创建最后一个索引值的数组
int last[] = { 1, 2, 3, 8, 10, 12, 14 };
Fisher-Yates对数组进行洗牌。
从混洗后的数组中取出第一个n-1
元素。
将索引添加到最终数字。
如果需要,对结果数组进行排序。
推荐阅读
- java - “==0”与“<1”的偏好
- r - 将 x 轴向左移动
- java - Cordova 插件未加载 com.google.zxing.client.j2se
- java - 为什么我在 switch for java 中使用了“默认”一词?
- javascript - 错误 TS2339:“温度”类型上不存在属性“摄氏度”
- java - 以 pdf 格式发送字节
- ios - Swift 5 如何使用按钮删除和复制表格视图单元格
- python - 如何加速下面的代码?实现没有中心元素的 maxpool
- python - 添加 https 支持后无法访问托管在 EC2 上的 Flask 应用程序
- reactjs - 用于初始化 useState 钩子的传入属性在调用钩子的更新程序方法时得到更新