好久沒來了,散散分,順便出個算法題,共同學習一下~~

sqfeiyu 2006-08-31 01:29:54
a(100) 是個int型的數組,其中只有兩個是重復的,
如何用一次循環找出相同的數?
...全文
505 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdbing2008 2006-09-21
  • 打赏
  • 举报
回复
学习 jf
sqfeiyu 2006-09-21
  • 打赏
  • 举报
回复
好長時間沒空上來了﹐趕緊結貼~~
呵呵~~
spfanghong 2006-09-04
  • 打赏
  • 举报
回复
楼上的算法要至少两次循环了,算法还是要和实际需要配合。最解决实际问题的算法就是最好的算法,目前楼主的实际问题是取值范围为int,并且要求一次循环。所以chewinggum的算法是最快最符合要求的,一次循环都未必做完就能得出结论而且代码量少,内存占用也可以容忍。
pigsanddogs 2006-09-02
  • 打赏
  • 举报
回复
恩。
integer可以用数组建索引, 效率为n
long的话空间置换时间就不合适了,
可先快速排序在查找.
效率为 n + n*log(n) = n*log(n)

并不慢.



attractive608 2006-09-02
  • 打赏
  • 举报
回复
高,实在是高!
EverySoft 2006-09-01
  • 打赏
  • 举报
回复
补充一句,如果正规来说像Test(-32768 To 32767) 数组还应该初始化一下0,万一哪台机器不照顾不是出不来了.
EverySoft 2006-09-01
  • 打赏
  • 举报
回复
总结一下,也就两个办法了
1.浪费空间省时间,只是觉得有点得不常失呀.如果现实写程序,不会这样写吧.
2.放在数据库里,真是!!我刚看到这个问题也是首先想到如果在数据库里就太容易了,可真没想到真有人说出来.
晓马过河 2006-09-01
  • 打赏
  • 举报
回复
用字典或集合对象实现才是正道,其实不恶心
很好阅读很好理解性能更是很不错
dong127 2006-09-01
  • 打赏
  • 举报
回复
上班有点无聊,所以贴个出来给大家瞧瞧,HOHO

Option Explicit
Private a(99) As String

Private Sub Command1_Click()
Dim i As Integer
Dim str_b As String
Dim temp As String
Dim str_e As String

Text1.Text = Text1.Text & "元数组为:" & vbCrLf

For i = LBound(a) To UBound(a)
Text1.Text = Text1.Text & a(i) & " "
If i Mod 10 = 9 Then
Text1.Text = Text1.Text & vbCrLf
End If
Next

Text1.Text = Text1.Text & vbCrLf & "重复数为:" & vbCrLf

str_b = Join(a, ",")

If InStr(str_b, ",") = 0 Then Exit Sub

Do Until InStr(str_b, ",") = 0
temp = Left(str_b, InStr(str_b, ",") - 1)
str_b = Right(str_b, Len(str_b) - Len(temp) - 1)
If InStr(str_e, temp) > 0 Then

ElseIf InStr(str_b, temp) > 0 Then
str_e = str_e & temp & ","
End If
Loop

Text1.Text = Text1.Text & Replace(str_e, ",", " ") & vbCrLf
End Sub

Private Sub Form_Load()
Dim i As Integer

For i = LBound(a) To UBound(a)
a(i) = Int(Rnd * 100)
Next
End Sub
xjjdanran 2006-09-01
  • 打赏
  • 举报
回复
odin223 2006-09-01
  • 打赏
  • 举报
回复
up
zmzbs123 2006-09-01
  • 打赏
  • 举报
回复
高,实在是高!
hchzhppp 2006-09-01
  • 打赏
  • 举报
回复
对数组进行排序,然后在找相同的值。
jinxin19831117 2006-09-01
  • 打赏
  • 举报
回复
数据库高人,果然比较高
yimins 2006-09-01
  • 打赏
  • 举报
回复
我也想到一个比较恶心的。不过似乎不如楼上那位数据库的高人恶心。

On Error Resume Next
Dim K As New Collection
Err.Clear
For i = 0 To 100
K.Add "", CStr(a(i))
If Err.Number <> 0 Then
MsgBox "重复项是:" & i
Exit For
End If
Next i
a_yin 2006-09-01
  • 打赏
  • 举报
回复
我有一个比较恶心的想法
写关键语句

dim con.....
dim rs.....

大家应该都明白我什么想法了吧。。。。

题目也没说用什么方法解决。。

还不明白的话。。。

数据表中就一个字段。。。是主键。。。非空。。无重复。。。
用一个循环往数据库中写入。。
有重复,返回错误代码
记下i的位置
——————————————————————————————————————
你不愧為新新人類啊!
slawdan 2006-09-01
  • 打赏
  • 举报
回复
VB 里有没有类似 VBS 中的字典对象阿?
如果有的话,也会比较快哦~,不过应该比不过数组下标的直接读取
doxob 2006-09-01
  • 打赏
  • 举报
回复
学习,可是不知道这句话是什么意思啊
Test(a(i)) = Test(a(i)) + 1
If Test(a(i)) = 2 Then
还请指教???
--------------------------------------------

应该是这样的,假如a(5)和a(10)都是15
当第一个a(5)时给Test(a(5))也就是Test(15)=Test(15)+1那么Test(15)=1
循环到Test(a(10))的时候Test(15)=Test(15)+1就等于2了
然后在判断Test(15)=2的话说明重复了。
doxob 2006-09-01
  • 打赏
  • 举报
回复
学习了
sparkwong 2006-09-01
  • 打赏
  • 举报
回复
很佩服chewinggum(口香糖·个人二五计划第一年)的算法,很不错哦
加载更多回复(21)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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