系统:Windows 7
软件:Excel 2016
- 本系列参考LeetCode一些题目,将其进行超级简化,用VBA来解
Part 1: 题目
- 有一个正序数组,删除其中的重复项
- 测试示例:
- 数组1:
arr1 = Array(1, 5, 5, 10, 10, 26)
,去重结果arr10 = Array(1, 5, 10, 26)
- 数组2:
arr2 = Array(5, 5, 10, 10, 15, 26, 26)
,去重结果arr20 = Array(5, 10, 15, 26)
- 数组1:
结果
Part 2: 解题逻辑
- 假设原数组为arr
- 新建一个数组newArr
- newArr索引从1开始计数,设置其第1个元素取值为newArr(1)为arr的第1个元素
- 对arr的第2个元素到最后一个元素进行循环
- 循环的每一个元素,与newArr的最后一个元素比对
- 如果不同,则将其写入newArr
- 如果相同则不用写入
Part 3:代码
Sub main()
arr1 = Array(1, 5, 5, 10, 10, 26)
arr2 = Array(5, 5, 10, 10, 15, 26, 26)
arr10 = removeDuplicates(arr1)
arr20 = removeDuplicates(arr2)
End Sub
Function removeDuplicates(arr)
UCount = UBound(arr)
LCount = LBound(arr)
Dim newArr()
ReDim Preserve newArr(1 To 1)
newArr(1) = arr(LCount)
For i = LCount + 1 To UCount Step 1
ele = arr(i)
newUCount = UBound(newArr)
lastEle = newArr(newUCount)
If ele <> lastEle Then
newUCount = newUCount + 1
ReDim Preserve newArr(1 To newUCount)
newArr(newUCount) = ele
End If
Next i
removeDuplicates = newArr
End Function
代码截图
Part 4: 部分代码说明
-
ReDim Preserve newArr(1 To newUCount)
保留数组原有的数值,并修改其索引范围 -
newArr(newUCount) = ele
,数组的第newUCount索引位置取值ele
Ps:没有经过充分论证,可能在某些情况下不成立,欢迎留言
- 更多学习交流,可加小编微信号
learningBin
更多精彩,请关注微信公众号
扫描二维码,关注本公众号