$difftime = TimerInit();計時開始
Local $sText
Local $avArray ;一万个数
For $i = 0 To UBound($avArray) - 1
$avArray[$i] = Random(1, 100, 1)
$sText &= $avArray[$i]
Next
;_ArrayDisplay($avArray, '原数组') ;原数组
$avArray = '(.+?)' ;从原数组中替换一个元素
;_ArrayDisplay($avArray, '新数组') ;某元素被替换后得到的新数组
$sString = _ArrayToString($avArray, '')
$aReg1 = StringRegExp('aaaaaaaaaa' & $sString & 'zzzzzzzzzz', '.{10}\(.+?\).{10}', 3)
$aReg2 = StringRegExp('aaaaaaaaaa' & $sText & 'zzzzzzzzzz', $aReg1, 3)
MsgBox(0, '用时:' & TimerDiff($difftime), '刚刚被替换的数是' & $aReg2) 回复 15# pusofalse
很好的想法,不知道效率如何,因为需要用到2个大字符串,不知道P大能给出一个有效率点的算法出来不。 回复 16# 水木子
我有空了测试下,这个不会碰到字符数限制? 再来个递归二分法。应该不会内存溢出。#include <Array.au3>
Local $avArray, $anArray;一万个数
Local $n
$begin = TimerInit()
For $i = 0 To UBound($avArray) - 1
$abc=Random(1, 100, 1)
$avArray[$i] = $abc
$anArray[$i] = $abc
Next
$half = UBound($avArray) / 2
$truehalf=$half
$n = $half
$n = UBound($avArray)
$num=Random(0, UBound($avArray) - 1, 1)
_ArrayDelete($avArray, $num) ;从数组中随机删除一个元素
;MsgBox(0,0,$num)
Runs()
For $i=Int($n) To Int($n)
If $avArray[$i]<>$anArray[$i] Then
MsgBox(0,TimerDiff($begin),$i&@TAB&$avArray[$i]&@CRLF&$num&@TAB&"校验")
ExitLoop
EndIf
Next
Func Runs()
If $avArray[$half-1]=$anArray[$half-1] Then
If $n-$n<=4 Then
;MsgBox(0,TimerDiff($begin),"只能是"&$n&"--"&$n)
Return
EndIf
add()
Else
jian()
EndIf
EndFunc
Func add()
$n=$n
$half=($n-$n)/2+$n
$n=$half
Runs()
EndFunc
Func jian()
$n=$n
$n=$n
$n=$n
$half=($n-$n)/2+$n
$n=$half
If $avArray[$half-1]=$anArray[$half-1] Then
$n=$n
$n=$n
;MsgBox(0,"","只能是")
;_ArrayDisplay($n,"减")
Runs()
Else
;_ArrayDisplay($n,"减")
Runs()
EndIf
EndFunc 都是高手...
页:
1
[2]