新闻动态

2026-01-27: 出现频率最低的数字。用go语言, 给定一个整数 n, 统

文章出处:未知 人气:107 发表时间:2026-02-12 22:03

2026-01-27:出现频率最低的数字。用go语言,给定一个整数 n,统计其十进制表示中每个数字出现的次数,找出出现次数最少的那个数字;若有多位并列,则取数值最小的那一位。把该数字作为整数返回。

输入: n = 723344511。

输出: 2。

解释:

在 n 中,出现频率最低的数字是 7、2 和 5,它们都只出现了一次。

题目来自力扣3663。

步骤一:统计数字出现次数

首先,程序需要统计整数 n 的十进制表示中每个数字(0-9)出现的次数。

1. 初始化计数器:创建一个长度为10的整数数组 cnt,初始值全为0。数组的索引对应数字0到9,其值对应该数字出现的次数。

2. 遍历每一位数字:通过一个循环来处理整数 n。只要 n 大于0,就重复以下操作:

• 提取末位数字:通过取模运算 n % 10 得到 n 的个位数字。

• 更新计数器:将计数器数组 cnt 中对应这个数字的计数值加1。

• 移除已处理位:通过整数除法 n / 10 去掉 n 的个位数,为处理下一位做准备。

3. 处理完成:当 n 变为0时,循环结束。此时,数组 cnt 中已经记录了0-9每个数字在原始整数中出现的次数。需要注意的是,如果某个数字没有出现过,它的计数将保持为0。

步骤二:查找出现次数最少的数字

在得到频率统计后,下一步是找出出现次数最少的数字。

1. 初始化查找变量:

• minC:用于记录当前找到的最小出现次数。初始值被设置为一个非常大的数(math.MaxInt),以确保第一次遇到出现过的数字时,其次数肯定比 minC 小。

• ans:用于记录当前找到的、满足条件(出现次数等于 minC)的数字。

2. 遍历计数器数组:遍历数组 cnt 的每一个位置(即数字0到9)。

3. 判断与更新:对于每个数字 i(即索引 i),如果它的计数值 c 大于0(表示该数字确实出现过),则进行以下判断:

• 发现更小频率:如果 c 小于当前的最小频率 minC,说明找到了出现次数更少的数字。此时,更新 minC 为这个更小的值 c,同时将答案 ans 更新为当前数字 i。

• 处理并列情况:如果 c 等于当前的最小频率 minC,说明出现了并列情况。这时,根据题目要求“取数值最小的那一位”,程序会比较当前数字 i 和当前答案 ans 的大小。如果 i 小于 ans,则更新 ans 为 i。你提供的代码中省略了这一步的逻辑,但根据题目描述,这是必要的一环。

4. 返回结果:遍历完成后,变量 ans 中存储的就是出现次数最少且数值最小的数字,将其作为结果返回。

⏱️ 复杂度分析

• 总的时间复杂度:O(d),其中 d 是整数 n 的十进制位数。

第一步统计次数需要循环 d 次(每次循环处理一位数字)。

第二步查找最小频率数字需要循环固定的10次(因为数字只有0-9共10种可能)。

因此,总时间与数字 n 的位数成正比。

• 总的额外空间复杂度:O(1),即常数空间。

程序只使用了一个固定大小的数组 cnt(长度10)和几个整型变量。这些空间需求不随输入整数 n 的大小而增长。

Go完整代码如下:

package main

import (

"fmt"

"math"

)

func getLeastFrequentDigit(n int) (ans int) {

// 统计每个数字的出现次数

cnt := [10]int{}

for n > 0 {

cnt[n]++

n /= 10

}

// 找出现次数最小的数字

minC := math.MaxInt

for i, c := range cnt {

if c > 0 && c

minC = c

ans = i

}

}

return

}

func main {

n := 723344511

result := getLeastFrequentDigit(n)

fmt.Println(result)

}

Python完整代码如下:

# -*-coding:utf-8-*-

import sys

def get_least_frequent_digit(n: int) -> int:

# 统计每个数字的出现次数

cnt = [0] * 10

while n > 0:

cnt[n % 10] += 1

n //= 10

# 找出现次数最小的数字

min_c = sys.maxsize

ans = 0

for i, c in enumerate(cnt):

if c > 0 and c

min_c = c

ans = i

return ans

if __name__ == "__main__":

n = 723344511

result = get_least_frequent_digit(n)

print(result)

C++完整代码如下:

#include

#include

int getLeastFrequentDigit(int n) {

// 统计每个数字的出现次数

int cnt[10] = {0};

while (n > 0) {

cnt[n % 10]++;

n /= 10;

}

// 找出现次数最小的数字

int minC = INT_MAX;

int ans = 0;

for (int i = 0; i

if (cnt[i] > 0 && cnt[i]

minC = cnt[i];

ans = i;

}

}

return ans;

}

int main {

int n = 723344511;

int result = getLeastFrequentDigit(n);

std::cout

return0;

}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。

欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

下一篇:没有了 上一篇:乌首都基辅遭空袭4人死亡

返回顶部