最小数据选择算法

最小数据选择

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个对象

posted @ 2023-05-25 15:15  Geek李  阅读(36)  评论(0)    收藏  举报