2025-04-28:替换为数位和以后的最小元素。用go语言,给定一个整数数组 nums,你需要将数组中每个元素替换成该元素各位
【摘要】 2025-04-28:替换为数位和以后的最小元素。用go语言,给定一个整数数组 nums,你需要将数组中每个元素替换成该元素各位数字之和。完成替换后,请返回数组中的最小值。1 <= nums.length <= 100。1 <= nums[i] <= 10000。输入:nums = [999,19,199]。输出:10。解释:nums 替换后变为 [27, 10, 19] ,最小元素为 10...
2025-04-28:替换为数位和以后的最小元素。用go语言,给定一个整数数组 nums,你需要将数组中每个元素替换成该元素各位数字之和。
完成替换后,请返回数组中的最小值。
1 <= nums.length <= 100。
1 <= nums[i] <= 10000。
输入:nums = [999,19,199]。
输出:10。
解释:
nums 替换后变为 [27, 10, 19] ,最小元素为 10 。
题目来自leetcode3300。
详细步骤:
-
输入准备
- 接收一个整数数组
nums
,数组长度为 1 到 100 之间,数组中每个元素的范围是 1 到 10000。
- 接收一个整数数组
-
初始化变量
- 定义一个变量
minV
用来记录当前计算出的数位和中的最小值。 - 将
minV
初始化为一个很大的整数值(比如系统支持的最大整数),确保后面比较时可以更新。
- 定义一个变量
-
遍历数组元素
- 依次访问数组中的每一个元素
num
。
- 依次访问数组中的每一个元素
-
计算数位和
- 对当前元素
num
,计算其各个位数的数字和。例如,对于999
:- 取最后一位数字
9
累加, - 再取倒数第二位数字
9
累加, - 取倒数第三位数字
9
累加, - 结果为 27。
- 取最后一位数字
- 具体做法是通过不断对数字取模 10 (
num % 10
) 获取个位数,再通过整除 10 (num / 10
) 去除最低位,直到数字被处理完。
- 对当前元素
-
更新最小值
- 用刚计算得到的数位和与当前
minV
进行比较。 - 如果该数位和更小,则将其更新为新的
minV
。
- 用刚计算得到的数位和与当前
-
完成遍历
- 重复步骤 3-5,直到所有元素都完成数位和的计算并比较。
-
返回结果
- 返回最终得到的最小数位和
minV
。
- 返回最终得到的最小数位和
-
补充说明
- 题目中提到“将数组中每个元素替换成各位数字之和”,代码虽然没有将数组元素实际修改,但计算过程模拟了替换后的数值计算,最终得到的最小值即为替换后数组中的最小元素。
总时间复杂度分析:
- 对于数组中每个元素,都需要计算其数位和。
- 每个元素最多有 4 位数字(因为最大值是 10000),
- 计算一个元素的数位和是 O(位数),即 O(4) = O(1)(常数时间)。
- 数组长度最多为 100。
- 因此,遍历整个数组的时间复杂度是 O(n),其中 n 是数组长度。
总体时间复杂度为 O(n)。
总额外空间复杂度分析:
- 代码中没有使用额外的数组或大规模的数据结构。
- 只使用了若干整型变量用于临时存储和比较(如
cur
、minV
)等。 - 因此,额外空间复杂度为 O(1),即常数空间。
Go完整代码如下:
package main
import (
"fmt"
"math"
)
func minElement(nums []int) int {
minV := math.MaxInt64
for _, num := range nums {
cur := 0
// 计算当前数字的各个位数之和
for n := num; n > 0; n /= 10 {
cur += n % 10
}
if cur < minV {
minV = cur
}
}
return minV
}
func main() {
nums := []int{999, 19, 199}
result := minElement(nums)
fmt.Println(result)
}
Python完整代码如下:
# -*-coding:utf-8-*-
def min_element(nums):
min_v = float('inf')
for num in nums:
cur = 0
n = num
while n > 0:
cur += n % 10
n //= 10
if cur < min_v:
min_v = cur
return min_v
if __name__ == "__main__":
nums = [999, 19, 199]
result = min_element(nums)
print(result)
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
- 2025-06-17:移除边之后的权重最大和。用go语言,给定一棵包含 n 个节点(编号 0 到 n-1)的无向树,边的信息由一
- 2025-06-16:最小数组和。用go语言,你有一个整数数组 nums 和三个整数 k、op1、op2。 你可以对数组进行以下
- 2025-06-15:重排子字符串以形成目标字符串。用go语言,给定两个字符串 s 和 t,它们是字母异位词(即包含完全相同的字
- 2025-06-14:最小正和子数组。用go语言,给定一个整数数组 nums 和两个整数 l 与 r,要求在数组中找到长度介于
- 2025-06-13:最多可收集的水果数目。用go语言,有一个由 n x n 格子组成的游戏地图,每个格子代表一个房间。给定一个
评论(0)