美文网首页
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