水木子 发表于 2010-6-27 11:29:23

#include <Array.au3>
$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)

大绯狼 发表于 2010-6-27 11:35:14

回复 15# pusofalse


很好的想法,不知道效率如何,因为需要用到2个大字符串,不知道P大能给出一个有效率点的算法出来不。

大绯狼 发表于 2010-6-27 11:37:10

回复 16# 水木子


我有空了测试下,这个不会碰到字符数限制?

3mile 发表于 2010-6-28 22:02:36

再来个递归二分法。应该不会内存溢出。#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

lin0308 发表于 2010-6-30 15:16:58

都是高手...
页: 1 [2]
查看完整版本: N个数中取走一个,如何知道取走的是哪个