2024-12-26:所有数对中数位差之和。用go语言,给定一个只包含正整数的数组 nums,其中所有整数的位数长度相同。 两个

举报
福大大架构师每日一题 发表于 2024/12/26 09:18:46 2024/12/26
【摘要】 2024-12-26:所有数对中数位差之和。用go语言,给定一个只包含正整数的数组 nums,其中所有整数的位数长度相同。两个整数之间的位差是指它们在相同位置上不同数字的个数。请计算并返回 nums 中所有整数对的位差之和。2 <= nums.length <= 100000。1 <= nums[i] < 1000000000。nums 中的整数都有相同的数位长度。输入:nums = [13...

2024-12-26:所有数对中数位差之和。用go语言,给定一个只包含正整数的数组 nums,其中所有整数的位数长度相同。

两个整数之间的位差是指它们在相同位置上不同数字的个数。

请计算并返回 nums 中所有整数对的位差之和。

2 <= nums.length <= 100000。

1 <= nums[i] < 1000000000。

nums 中的整数都有相同的数位长度。

输入:nums = [13,23,12]。

输出:4。

解释:

计算过程如下:

1.13 和 23 的数位差为 1 。

2.13 和 12 的数位差为 1 。

3.23 和 12 的数位差为 2 。

所以所有整数数对的数位差之和为 1 + 1 + 2 = 4 。

答案2024-12-26:

chatgpt

题目来自leetcode3153。

大体步骤如下:

1.初始化结果变量 res 为 0。

2.对于每一位数字位置,统计整个数组中各个数字在这一位上出现的次数。

3.计算任意两个数字在这一位上的位差并将其累加到结果 res 中。

4.返回总的结果 res 除以 2(因为每对数字的位差会被计算两次)。

时间复杂度分析:

  • 需要遍历数组 nums 中所有数字,然后对每个数字的每位进行处理,时间复杂度约为 O(n * d),其中 n 是数组长度,d 是数字的位数。在本问题中,因为数组中所有整数具有相同的位数长度,所以最终时间复杂度也是线性的。

空间复杂度分析:

  • 需要使用一个长度为 10 的数组来统计每个位置出现的次数,因此额外空间复杂度是 O(10) = O(1),即常数级别的额外空间。

Go完整代码如下:

package main

import (
	"fmt"
)

func sumDigitDifferences(nums []int) int64 {
	res := int64(0)
	for nums[0] > 0 {
		cnt := make([]int, 10)
		for i := 0; i < len(nums); i++ {
			cnt[nums[i]%10]++
			nums[i] /= 10
		}
		for i := 0; i < 10; i++ {
			res += int64(len(nums)-cnt[i]) * int64(cnt[i])
		}
	}
	return res / 2
}

func main() {
	nums := []int{13, 23, 12}
	fmt.Println(sumDigitDifferences(nums))
}

在这里插入图片描述

Rust完整代码如下:

fn sum_digit_differences(nums: &mut Vec<i32>) -> i64 {
    let mut res: i64 = 0;

    while nums[0] > 0 {
        let mut cnt = vec![0; 10];
        for i in 0..nums.len() {
            cnt[(nums[i] % 10) as usize] += 1;
            nums[i] /= 10;
        }

        for i in 0..10 {
            res += ((nums.len() as i64) - (cnt[i] as i64)) * (cnt[i] as i64);
        }
    }

    res / 2
}

fn main() {
    let mut nums = vec![13, 23, 12];
    println!("{}", sum_digit_differences(&mut nums));
}

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。