Excel-VBA-算法挑战-04-小于当前数字的个数

系统:Windows 7
软件:Excel 2016

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

Part 1: 题目

  1. 有多少个小于当前数字的数字
  2. 测试示例:
  • arr1 = Array(5, 1, 7, 9, 3),结果为Array(2, 0, 3, 4, 1)
  • arr2 = Array(16, 18, 15, 20),结果为Array(1, 2, 0, 3)

结果
在这里插入图片描述

Part 2: 解题逻辑

  1. 假设原数组为arr1
  2. 新建一个数组arr,数组中每一个元素取值为小于当前数字的个数
  3. 设置count初始值为0
  4. 对数组arr1进行遍历,对每个元素将其与arr1的每一个元素进行比对
  5. 若满足条件,小于当前数字,则count+1
  6. count为结果
  7. count存入arr数组
  8. 因为本题是求小于当前数字的个数,某元素本身不小于元素本身,所以无需将自身去除考虑

Part 3:代码

Sub main()
    arr1 = Array(5, 1, 7, 9, 3)
    arr11 = getCount(arr1)
    
    arr2 = Array(16, 18, 15, 20)
    arr21 = getCount(arr2)
    
End Sub
Function getCount(arr1)
    Dim arr()
    
    i = 0
    For Each outer_ele In arr1
        ReDim Preserve arr(0 To i)
        Count = 0
        For Each inner_ele In arr1
            If inner_ele < outer_ele Then
                Count = Count + 1
            End If
        Next
        
        arr(i) = Count
        i = i + 1
    Next
    
    getCount = arr
End Function


代码截图
在这里插入图片描述

Part 4: 部分代码说明

  1. ReDim Preserve arr(0 To i)改变数组的大小,并保留之前的数组元素,讲真VBA中的数组用起来十分不方便啊,若有更好的操作方法,欢迎告知
  2. 本题本质就是两个循环,属于暴力解题法,欢迎提供更简单高效的方法

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

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

公众号底部二维码.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值