You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java中检查两个整数数组元素与位置:数字相似度统计需求

计算两个数字的相似度指标

没问题,我来帮你拆解这个需求,一步步实现两个核心相似度指标的计算:

首先明确两个指标的定义:

  • 同位置匹配数:两个数字对应数位上完全相同的数字个数
  • 跨位置共同数:两个数字中都出现过的数字总次数(需考虑重复情况,比如A里有2个2,B里有1个2,这部分算1次)

步骤1:先对齐数位(关键前提)

如果用户输入的两个数字位数不一样,得先给较短的数字补前导零,让两个数组的长度一致。比如输入12345,要把45转成045,对应的数组就是[0,4,5][1,2,3],这样才能正确对应位置比较。


步骤2:计算同位置匹配数

这个逻辑非常直观:遍历两个数组的对应索引,逐个比较元素,统计相等的次数就行。

示例代码(Python):

def count_same_position(arr1, arr2):
    match_count = 0
    # 假设两个数组已经对齐长度
    for num1, num2 in zip(arr1, arr2):
        if num1 == num2:
            match_count += 1
    return match_count

步骤3:计算跨位置共同数

这里要注意重复数字的处理——不能直接用集合(集合会自动去重,丢失重复次数的信息)。正确的做法是先统计每个数字在两个数组中的出现频率,然后对每个数字取两个频率的最小值,最后把这些最小值加起来。

示例代码(Python):

from collections import Counter

def count_common_digits(arr1, arr2):
    # 统计每个数字的出现次数
    count1 = Counter(arr1)
    count2 = Counter(arr2)
    
    total_common = 0
    # 遍历所有在任意数组中出现过的数字
    for digit in set(count1.keys()).union(count2.keys()):
        # 取两个数组中该数字出现次数的较小值
        total_common += min(count1.get(digit, 0), count2.get(digit, 0))
    return total_common

完整使用示例

假设用户输入的两个数字是12232321,对应的数组是[1,2,2,3][2,3,2,1]

  • 同位置匹配数:只有索引2的数字都是2,结果为1
  • 跨位置共同数:1出现1次、2出现2次、3出现1次,总和是4

调用代码:

arr1 = [1,2,2,3]
arr2 = [2,3,2,1]

same_pos_result = count_same_position(arr1, arr2)
common_digits_result = count_common_digits(arr1, arr2)

print(f"同位置相同数字数量:{same_pos_result}")
print(f"不同位置均出现的数字数量:{common_digits_result}")

输出:

同位置相同数字数量:1
不同位置均出现的数字数量:4

小提示

  • 如果你的数组是从用户输入的字符串转来的(比如"123"转成['1','2','3']),直接比较字符也可以,不用特意转整数,因为数字字符的比较逻辑和整数一致。
  • 如果用其他编程语言(比如Java、C++),可以用哈希表(HashMap、unordered_map)来实现类似Counter的统计功能。

内容的提问来源于stack exchange,提问作者user5943774

火山引擎 最新活动