Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: haiyang81

[已解决]求数组元素连续个数最大值和最大值个数的代码

  [复制链接]
发表于 2011-11-4 12:48 | 显示全部楼层
本帖最后由 liuts 于 2011-11-4 12:49 编辑

回复 haiyang81 的帖子

  1. Sub test()
  2. '先引用正则控件,方法:工具-引用-"Microsoft VBsrcipt Regular EXpression 5.5"
  3.     Dim reg As New RegExp, sr, arr, str, 字符串 As String
  4.     字符串 = "情况为:" & Chr(13)
  5.     Dim i As Integer, j As Integer, k As Integer
  6.     arr = Array(0, 1, 1, 1, 0, 0, 2, 2, 1, 3, 3, 0, 0, 1, 1, 1, 2, 3, 0, 2)
  7.     sr = Join(arr, "")
  8.     For i = 0 To 3
  9.         For j = Len(sr) To 1 Step -1
  10.             str = "(" & i & "){" & j & "}"
  11.             With reg
  12.                 .Global = True
  13.                 .Pattern = str
  14.                 If .test(sr) Then
  15.                     s = sr
  16.                     k = (Len(s) - Len(Replace(s, String(j, CStr(i)), ""))) / j
  17.                     字符串 = 字符串 & Chr(13) & i & "的连续最大值为" & j & ",出现次数" & k & "次"
  18.                     Exit For
  19.                 End If
  20.             End With
  21.         Next
  22.     Next
  23.     MsgBox 字符串
  24. End Sub
复制代码

点评

不适合用正则来处理吧,局限性太大了。  发表于 2011-11-4 12:53
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2011-11-4 12:49 | 显示全部楼层
还是没看楼主的次数咋算的,3明明是出现2次,最大续连数是2,怎么成了
最大连续数是2,出现次为是1呢?

点评

最大连续数是2,要返回这个最大出现了几次。  发表于 2011-11-4 12:53
回复

使用道具 举报

 楼主| 发表于 2011-11-4 12:55 | 显示全部楼层
回复 兰色幻想 的帖子

arr=array(0,1,1,1,0,0,2,2,1,3,3,0,0,1,1,1,2,3,0,2)

篮板,是说0,1,2,3,连续出现的最大值及出现连续最大值的次数。
回复

使用道具 举报

 楼主| 发表于 2011-11-4 12:59 | 显示全部楼层
能不能建议不要设定最佳答案,改为参考答案。很多时候真是没法选择。
liuts  liuguansky都挺好,都是我想要的,尽管我不懂正则运算的局限性。

点评

随便把数组的元素修改下就不适用了。 比如元素非一位。 而且按元素的个数即长度来判断重复次数,效率应该太低。  发表于 2011-11-4 13:10
回复

使用道具 举报

发表于 2011-11-4 13:05 | 显示全部楼层
哈哈,刚看了正则视频,我就是拿来练练手,这种方法确实不适合这种大循环。数据多了,效率不高。
回复

使用道具 举报

发表于 2011-11-4 13:32 | 显示全部楼层
本帖最后由 爱疯 于 2011-11-4 14:44 编辑

  1. Sub test()
  2.     Dim A, m%, n%, i%, x$, y$
  3.     A = Array(0, 1, 1, 1, 0, 0, 2, 2, 1, 3, 3, 0, 0, 1, 1, 1, 2, 3, 0, 2)
  4.     m = Application.Min(A)
  5.     n = Application.Max(A)
  6.     x = Replace(Join(A), " ", "")
  7.     For i = m To n
  8.         y = y & pd(x, i) & vbLf
  9.     Next i
  10.     MsgBox y
  11. End Sub

  12. Function pd(x, i) As String '判断
  13.     Dim regex As Object, matchs As Object, match As Object
  14.     Dim k As Integer, j As Integer
  15.     Set regex = CreateObject("VBScript.RegExp")
  16.     With regex
  17.         .Global = True
  18.         .Pattern = i & "{2,}"
  19.         Set matchs = .Execute(x)
  20.         For Each match In matchs
  21.             j = j + 1
  22.             k = Application.Max(k, Len(match))
  23.         Next
  24.     End With
  25.     pd = i & "的连续最大值为:" & k & ",出现次数:" & j & "次"
  26. End Function
复制代码
这题有代表性,做了还是发这儿吧,以后好COPY{:011:}
回复

使用道具 举报

 楼主| 发表于 2011-11-4 13:58 | 显示全部楼层
爱疯你早来多好啊。你的答案正是我最想要的。
害得我正在修改liuguansky的代码
回复

使用道具 举报

 楼主| 发表于 2011-11-4 14:16 | 显示全部楼层
本帖最后由 haiyang81 于 2011-11-4 14:24 编辑

回复 爱疯 的帖子

怎么把 Function 部分用 数组 表示结果。字符串不利于引用数值。用三维数组可以吗?

回复

使用道具 举报

发表于 2011-11-4 14:49 | 显示全部楼层
haiyang81 发表于 2011-11-4 14:16
回复 爱疯 的帖子

怎么把 Function 部分用 数组 表示结果。字符串不利于引用数值。用三维数组可以吗?

我也是用得不熟,所以做的很慢。
返回的pd可转为一维数组。不清楚你希望怎么改,怎么引用。
回复

使用道具 举报

 楼主| 发表于 2011-11-4 15:05 | 显示全部楼层
本帖最后由 haiyang81 于 2011-11-4 15:10 编辑

回复 爱疯 的帖子

0的连续最大值为2,出现次数2次
1的连续最大值为3,出现次数2次

2的连续最大值为2,出现次数1次
3的连续最大值为2,出现次数1次。

arr(i)表示连续最大值,其中i为给定数组Array中从小到大的不重复的值,即0到n
brr(i)表示出现次数。

不知能否做到?

点评

我的代码不用循环字典的KEY就可以了 KEYS为不重复值的数组 ITEMS为连续最大值与对应出现次数的二维数组。  发表于 2011-11-4 15:59
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-18 15:28 , Processed in 0.307118 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表