LeetCode 每日一题笔记 日期:2026.05.29 题目:3300. 最小元素

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.05.29
  • 题目:3300. 最小元素
  • 难度:简单
  • 标签:数组、数学

1. 题目理解

问题描述

给定一个整数数组 nums,将数组中每个元素替换为它的各位数字之和 ,返回替换后的数组中的最小值

示例

输入:nums = 10,12,13

输出:1

解释:各位和分别为 1、3、4,最小值是 1。

2. 解题思路

核心观察

  • 求数字的各位和有两种方式:字符串遍历、数学取模运算。
  • 数学法效率更高,无需字符串转换,减少开销。

算法步骤

  1. 遍历数组所有元素。
  2. 对每个数字,循环取余累加得到各位和。
  3. 记录最小的各位和。

3. 代码实现

java 复制代码
package lc3300;

public class Solution {
    public int minElement(int[] nums) {
        int res = Integer.MAX_VALUE;
        for (int i = 0; i < nums.length; i++) {
            String s = String.valueOf(nums[i]);
            int curRes = 0;
            for (int j = 0; j < s.length(); j++) {
                int num = s.charAt(j) - '0';
                curRes += num;
            }

            res = Math.min(res, curRes);
        }
        return res;
    }
}

4. 代码优化说明

(代码未做任何修改,仅添加注释讲解)

java 复制代码
class Solution {
public int minElement(int[] nums) {
    // 获取数组长度
    int len = nums.length;
    // 初始化最小值为整型最大值
    int min = Integer.MAX_VALUE;

    // 遍历数组中的每一个数字
    for (int i = 0; i < len; i++) {
        int num = nums[i];
        // 存储当前数字的各位之和
        int temp = 0;

        // 循环计算各位和:取最后一位累加,然后移除最后一位
        while (num > 0) {
            temp += num % 10;
            num /= 10;
        }

        // 更新最小值
        min = Math.min(min, temp);
    }

    return min;
}
}

5. 复杂度分析

  • 时间复杂度 :O(n×d)O(n \times d)O(n×d)
    n 为数组长度,d 为数字最大位数,整体接近线性复杂度。
  • 空间复杂度 :O(1)O(1)O(1)
    仅使用常数级变量,无额外空间。

6. 总结

  • 核心:数学取模求各位和,比字符串方式更高效。
  • 优化点:去掉字符串转换操作,纯数值运算提升性能。
  • 关键技巧:num % 10 取最后一位,num /= 10 去掉最后一位。
相关推荐
峥无11 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
不会代码的小猴12 小时前
3. 控件学习1
开发语言·c++·笔记·qt·算法
疯狂打码的少年13 小时前
【数据结构】图的存储结构:邻接矩阵与邻接表
数据结构·笔记
203号居民13 小时前
LeetCode hot 100 —41. 缺失的第一个正数
数据结构·算法·leetcode
蒸蒸yyyyzwd14 小时前
cpp 选手准备秋招学习笔记 day10
笔记·面试·求职招聘
haerapicom15 小时前
欠定方程里藏着哪几个非零项:OMP 稀疏恢复侦探笔记
笔记
程思扬15 小时前
Android ANR实战排查:主线程SystemClock.sleep导致页面启动偶现无响应
android·笔记
zjnlswd16 小时前
C#学习笔记4
笔记·学习·c#
evans在进步16 小时前
LeetCode 322:零钱兑换——Java 动态规划详解
java·leetcode·动态规划
青山是哪个青山17 小时前
LangChain 学习笔记(九):上下文与记忆
笔记·学习·langchain