系统:Windows 7
软件:Excel 2016
- 本系列参考LeetCode一些题目,将其进行超级简化,用VBA来解
Part 1: 题目
- 有多少个小于当前数字的数字
- 测试示例:
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: 解题逻辑
- 假设原数组为arr1
- 新建一个数组arr,数组中每一个元素取值为小于当前数字的个数
- 设置count初始值为0
- 对数组arr1进行遍历,对每个元素将其与arr1的每一个元素进行比对
- 若满足条件,小于当前数字,则count+1
- count为结果
- 将count存入arr数组
- 因为本题是求小于当前数字的个数,某元素本身不小于元素本身,所以无需将自身去除考虑
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: 部分代码说明
ReDim Preserve arr(0 To i)
改变数组的大小,并保留之前的数组元素,讲真VBA中的数组用起来十分不方便啊,若有更好的操作方法,欢迎告知- 本题本质就是两个循环,属于暴力解题法,欢迎提供更简单高效的方法
- 更多学习交流,可加小编微信号
learningBin
更多精彩,请关注微信公众号
扫描二维码,关注本公众号