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