如何计算两个有序整数数组按位置比对的匹配率
有序整数数组位置匹配率计算方案
规则梳理
先明确给定的约束与匹配逻辑:
- 输入为两个元素取值范围0-9的有序整数数组,匹配时严格按位置一一对应比对:数组1第i位元素仅和数组2第i位元素做相等判断
- 结合给出的所有示例,可反推出匹配率计算公式,100%覆盖样例结果:
匹配率 = 50%基础分 +(位置值相等的元素个数 / 参与比对的总元素数)* 50%
样例校验结果:
[9]对比[9]:匹配数1,总长度1 → 50% + (1/1)*50% = 100%,符合预期[9]对比[4]:匹配数0,总长度1 → 50% + (0/1)*50% = 50%,符合预期[4, 3]对比[4,3]:匹配数2,总长度2 → 50% + (2/2)*50% = 100%,符合预期
- 前置处理注意:如果两个数组长度不一致,可根据业务需求选择两种处理方式:直接抛出参数异常、按较短数组的长度截断后比对。
Ruby 实现代码
def calculate_match_rate(arr1, arr2) # 取两个数组的较短长度作为比对长度,若需要长度强校验,可替换为下方注释的抛错逻辑 # raise "输入数组长度必须一致" if arr1.length != arr2.length compare_length = [arr1.length, arr2.length].min return 0.0 if compare_length.zero? # 处理空数组输入场景 match_count = 0 compare_length.times do |idx| match_count += 1 if arr1[idx] == arr2[idx] end # 返回0-1之间的小数结果,需要百分比格式直接乘100即可 0.5 + (match_count.to_f / compare_length) * 0.5 end # 验证示例 calculate_match_rate([9], [9]) # => 1.0 即100% calculate_match_rate([9], [4]) # => 0.5 即50% calculate_match_rate([4,3], [4,3]) # => 1.0 即100%
逻辑调整说明
如果实际业务规则不存在50%基础分(即完全无位置匹配时匹配率为0%),仅需把计算逻辑替换为「匹配率 = 位置值相等的元素个数 / 参与比对的总元素数」即可,对应修改代码中的计算行:
match_count.to_f / compare_length
内容的提问来源于stack exchange,提问作者Andre Zimpel
相关产品推荐
相关产品推荐

