我想在以下代码中找到Big O中的时间复杂度:
ReverseString(S,x,y)
if x < y
swap(S,x,y)
return ReverseString(S,x+1,y-1)
我得到的等式是
T(1) = 1
T(n) = 3 + T(n+1)+ T(n-1)
如果我是对的,我将如何解决这个问题。
如果我不对,那么正确的等式是什么。
答案 0 :(得分:0)
假设x和y是指向字符串末尾的指针,那么你的等式是错误的。这是一个简单的单一递归,但你假设是双倍的。此外,存在使T(n)依赖于T(n + 1)的严重问题;你真的不想在下标中 up 而没有保证的,有限的有限减少。
这样思考:每次迭代都会使x和y彼此靠近一个字符。您的单个递归遍历字符串的一半。我会将关系设为
Sub ForEach_Loop()
Dim ws3 As Worksheet
Dim row As Range
Set ws3 = Worksheets("Sheet3")
For Each row In ws3.Range("A2:M300").Rows
If Application.CountA(row) = 1 And row.Cells(3).Value <> "" Then
With row.Cells(3)
row.Cells(6).Offset(-1, 0).Value = .Value
.ClearContents
End With
End If
Next row
End Sub
其中n是字符串长度的一半(如果是奇数则截断)。