设数组a[N]存有N个float数,如何确定其中有多少个不同的数?

ufouser 2004-03-25 10:21:14
设数组a[N]存有N个float数,如何确定其中有多少个不同的数?
算法复杂度不能超过N*LOG(N).
能不能不排序就解决问题?
...全文
77 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ufouser 2004-03-29
  • 打赏
  • 举报
回复
谢谢
firstsee 2004-03-27
  • 打赏
  • 举报
回复
用平衡二叉树的话效率会更高,如果数据量大的话,检索的速度会明显优于排序树。
草履虫程序员 2004-03-27
  • 打赏
  • 举报
回复
用链表的数据结构方式,通过结点进行筛选。
ding44 2004-03-27
  • 打赏
  • 举报
回复
如果N很大,而结果不要精确的话,可以用概率计数方法
feizhongchao 2004-03-26
  • 打赏
  • 举报
回复
如果不考虑空间复杂度就可以。
把它转化为对整数的判断方法。
1. 如果是整数,则可以另外建立一个数组c[n],长度为从最小的那个数一直建到最大的那个数。
然后如果c[n]=x,x为a[n]中的一个数。
则c[n]++。
最后遍历一次,如果发现c[n]某一位大于2,则说明有重复。
2.对计算机表示的浮点数,他的小数位是有限的,可以看作常数CONST。
3.有了上面两个前提:
对这些浮点数从最高位到最低位一次判断有没有重复的。对有重复的就比较下一位。
时间复杂度为CONST*N
hell190109 2004-03-26
  • 打赏
  • 举报
回复
每个float数都不太大的话,这样,做一个链表数组b[max],max是你预计的源数组中所有float数最大不会超过的数,然后你遍历一次a[N]就可知道有多少样的数了,比如第一个数是3.8,你就把他放在b[3]链表里的第一个位置,这样遍历下去,如果察到的链表里有数了,就在链表里比一下,看有没有样的,没有就放在后面,有就不放,计数器加一。
如果有a[N]里有负数,你可以再做一个c[max]。
a[N]中元素值范围很大的话,就先除个1000、10000什么的,在察数组,往里放。
如果只是个别的大,那把他们提出来单算。
wlpwind 2004-03-26
  • 打赏
  • 举报
回复
上面的复杂度为n^2.

可以不排序,但是应该要建二叉排序树。
qingcaodi 2004-03-26
  • 打赏
  • 举报
回复
可以不排序。

另设一数组b[N]和int count=0。然后将数组a从头挨个看过去,每一个都和数组b中的前count个数比过去,如果是同一个数,就看数组a中的下一个数;如果没有在b中找到一样的,就将这个值拷贝到b中,并且count加一。最后的count就是答案。

请注意,float数不能简单的用等于或不等于来判断是否为同一个数。

33,028

社区成员

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

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