求一个算法

eastred 2013-07-01 09:13:45
有一堆不重复的数字
给定一个数字,找到这堆数字里比这个数字大的最少的数字。

比如
1 10 23 42
给定10则返回10
给定12则返回23
给定50则返回NULL

求一个最快的算法
...全文
193 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel6709 2013-07-02
  • 打赏
  • 举报
回复
int a[]={0,1,0,0,0,0,0,0,0,0,10,....}
angel6709 2013-07-02
  • 打赏
  • 举报
回复
桶吧 O(1)
march_on 2013-07-01
  • 打赏
  • 举报
回复
引用 5 楼 eastred 的回复:
这些数据很可能建立就一次,访问可能会很多次,因此可以不管建立速度,需要提高访问速度。 有比二叉排序树更快的方法么。 另外有个限制是数字的范围是限定的,比如1-100000,但是包含的数目是可变的,比如0-100000个。
嗯, 有道理。根据这个输入数组建立二叉排序树应该需要额外的一块相等大小的空间吧,这个的复杂度是o(nlgn)吧,求教
eastred 2013-07-01
  • 打赏
  • 举报
回复
这些数据很可能建立就一次,访问可能会很多次,因此可以不管建立速度,需要提高访问速度。 有比二叉排序树更快的方法么。 另外有个限制是数字的范围是限定的,比如1-100000,但是包含的数目是可变的,比如0-100000个。
libralibra 2013-07-01
  • 打赏
  • 举报
回复
二叉排序树,O(lgn)
march_on 2013-07-01
  • 打赏
  • 举报
回复
引用 2 楼 eastred 的回复:
O(n)太慢了, 那堆数字可以做预处理,可以用数据结构组织,比如hash表,二叉树之类。
想过可以预处理为堆,或二叉搜索树,但是建立的过程都不止O(n)吧
eastred 2013-07-01
  • 打赏
  • 举报
回复
O(n)太慢了, 那堆数字可以做预处理,可以用数据结构组织,比如hash表,二叉树之类。
march_on 2013-07-01
  • 打赏
  • 举报
回复
用min_bigger 维护当前比他大的最小数字,初始化为那个给定的数字,记为given_number, 然后遍历数组,如果当前元素大于等于given_number且小于min_bigger,那么就更新min_bigger为当前元素。 复杂度为O(n) 这是最自然的想法,但不知道是否最快

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧