美文网首页
Excel-VBA-算法挑战-02

Excel-VBA-算法挑战-02

作者: Data_Python_VBA | 来源:发表于2020-08-30 19:40 被阅读0次

微信公众号原文

系统:Windows 7
软件:Excel 2016

  • 本系列参考LeetCode一些题目,将其进行超级简化,用VBA来解

Part 1: 题目

  1. 有一个正序数组,删除其中的重复项
  2. 测试示例:
    • 数组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.png

Part 2: 解题逻辑

  1. 假设原数组为arr
  2. 新建一个数组newArr
  3. newArr索引从1开始计数,设置其第1个元素取值为newArr(1)arr的第1个元素
  4. 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

代码截图

2.png

Part 4: 部分代码说明

  1. ReDim Preserve newArr(1 To newUCount)保留数组原有的数值,并修改其索引范围
  2. newArr(newUCount) = ele,数组的第newUCount索引位置取值ele

Ps:没有经过充分论证,可能在某些情况下不成立,欢迎留言


  • 更多学习交流,可加小编微信号learningBin

更多精彩,请关注微信公众号
扫描二维码,关注本公众号

公众号底部二维码.jpg

相关文章

网友评论

      本文标题:Excel-VBA-算法挑战-02

      本文链接:https://www.haomeiwen.com/subject/kfpkrktx.html