publicclass No
{
publicint Number { get; set; }
publicbool IsUsed { get; set; } = false;
}
public List<No> NoManage()
{
List<No> _list = new List<No>();
for (int i = 1; i <= 1000; i++)
{
No no = new No();
no.Number = i;
_list.Add(no);
}
return _list;
}
public No GetNoUsed(List<No> _list)
{
return _list.Where(o => !o.IsUsed).SingleOrDefault();
}
我写过,但估计不是最优的,同求
看了上面的方法,还是有必改进的空间。
这个问题从本质上讲就是一个排序问题,向上面贫民窟大侠回的就用了两次排序解决问题的。而且还封装了对象,有点繁琐。
我的方法是:
1、定义1000大小的数组list[1000],全部赋值为0;
2、取值时:int index=list.IndexOf(0);
3、释放时:list[index]=0;
如上,不需要任何查询或复杂逻辑就可以实现这个功能了。
另外,我的这个方法中我留了一个Bug希望你能看出来哦。不谢!
1,2,3,7,12,13,22,31,53,121,221,671,998,现需要获取一个新的编号,只要没被使用即可,求最优算法?
释放的时候 存起来 到时候直接取出来用。
bitmap
构建长度1k的bool数组,对已有数据遍历同时对对应偏移量的bool数组元素设为true,以后拿取时只需遍历bool数组找到第一个为false的的偏移量加1就是你的编号