最小数据选择算法
最小数据选择
1. 问题
从addressList中选择maxCount个health值最小的node,并返回一个列表
2. 代码示例
public class Node {
public static final int MAX_HEALTH_VALUE = 1000;
private int health;
}
public List<Node> selectedSourceHolderList(List<Node> addressList, int maxCount) {
int holderCount = addressList.size();
if (holderCount <= maxCount) {
return addressList;
}
//创造最后输出的列表
List<Node> selectedAddressList = new ArrayList<Node>();
//创造一个健康值大小+1的列表
List<List<Node>> healthArray = new ArrayList<>(Node.MAX_HEALTH_VALUE + 1);
//对所有的node循环
for (int index = 0; index < addressList.size(); index++) {
Node address = addressList.get(index);
int health = address.getHealth();
//获取对应健康值的列表
List<Node> indexList = healthArray.get(health);
//若对应列表不存在,根据健康值创造列表
if (indexList == null) {
indexList = new ArrayList<>();
healthArray.set(health, indexList);
}
//将address放入创造好的列表中
indexList.add(address);
}
int count = 0;
int index = 0;
//将排列好的address放到最终的selectedAddressList中
while (count < maxCount) {
List<Node> addrList = healthArray.get(index);
for (Node address : addrList) {
selectedAddressList.add(address);
if (++count >= maxCount) {
break;
}
}
index++;
}
return selectedAddressList;
}
}
3. 结论
以数组或者列表下标为数值,其所指向的内容为新的数组或者列表,将M个对象里面某个数值和下标相同的对象提取出来放入对应的列表中,从头到尾遍历这个listA,就可以选择出N个对象

浙公网安备 33010602011771号