系统: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+1count为结果将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
更多精彩,请关注微信公众号 扫描二维码,关注本公众号