每日一题 力扣 1848. 到目标元素的最小距离 模拟 C++题解

文章目录

题目描述

题目链接:力扣 1848. 到目标元素的最小距离

示例 1:

输入:nums = 1,2,3,4,5, target = 5, start = 3

输出:1

解释:nums4 == target ,且 abs(4 - 3) = 1 ,是最小的距离。
示例 2:

输入:nums = 1, target = 1, start = 0

输出:0

解释:唯一的下标就是 target 所在位置,距离为 0 。
提示:

1 <= nums.length <= 1000

1 <= numsi <= 104

0 <= start < nums.length

target 存在于 nums 中

思路简述

今天是奖励题,这道题是简单题中的"直球题",没有太多弯弯绕绕,核心思路就是暴力遍历 + 打擂台求最小值

我们只需要做两件事:

  1. 从头到尾扫一遍数组,找到所有值等于 target 的下标。
  2. 对于每一个找到的下标,计算它和 start 的绝对距离,同时维护一个"当前最小距离",只要遇到更小的距离就更新它。

因为题目保证了 target 一定存在,所以最后直接返回这个最小距离就行。

代码实现

cpp 复制代码
class Solution {
public:
    int getMinDistance(vector<int>& nums, int target, int start) {
        // 初始化结果为一个很大的数(INT_MAX),方便后续打擂台
        int ret = INT_MAX;
        
        // 遍历数组中的每一个下标 i
        for(int i = 0; i < nums.size(); i++)
        {
            // 如果当前位置的值等于 target
            if(nums[i] == target)
            {
                // 计算距离,并和当前的最小值 ret 比较,取较小的那个更新 ret
                ret = min(ret, abs(i - start));
            }
        }
        
        // 遍历结束后,ret 就是最小距离
        return ret;
    }
};

复杂度分析

  • 时间复杂度O(n)

    其中 n 是数组 nums 的长度。我们只需要遍历一次数组,每个元素只看一眼,所以时间是线性的。

  • 空间复杂度O(1)

    我们只开了几个变量(ret 和循环变量 i),没有用额外的数组、哈希表等结构,所以空间是常数级的。

踩坑记录

  1. 初始值必须设得足够大

    用来存结果的变量 ret 必须初始化为一个比所有可能的距离都大的值,比如 INT_MAX。如果图省事初始化为 0,那 min 函数就永远不会更新它,结果就错了。

  2. 题目保证存在 target,无需兜底

    题目明确说了"数据保证 target 存在于 nums 中",所以最后不用处理 ret 还是 INT_MAX 的情况,直接返回就行。如果是自己在面试中写这道题,最好还是问一下面试官是否需要处理 target 不存在的情况,显得严谨。

  3. 注意下标是从 0 开始的

    题目里明确说了下标从 0 开始,虽然这道题只是计算绝对差,不怎么涉及下标越界操作,但养成看清楚下标范围的习惯很重要哦。

如果这篇博客对你有帮助,别忘了点赞支持一下~也可以收藏起来,方便后续刷题复习时随时翻看。要是能顺手点个关注,爱弥斯还能得到漂泊者批准的游戏时间哦!

相关推荐
zh路西法18 分钟前
【玩转VLA具身智能机械臂】(二):MoveIt2 运动规划——架构、配置与 C++ 上手
c++·机械臂·路径规划·vla·planner·moveit2
五月底_30 分钟前
LIS算法
python·算法·最长子序列
学学酱快乐1 小时前
2026年PMP考试生命周期选择决策树精讲:从需求判断到混合型统一框架的应试全攻略
算法·决策树·机器学习·pmp新版考试大纲·pmp新题型·pmp培训哪家好·pmp培训机构推荐
爱和冰阔落1 小时前
【Linux】Ctrl+C 到底做了什么?从键盘、kill 到 alarm,一次讲清信号的产生
linux·运维·c++·安卓
傅科摆 _ py1 小时前
动态规划复习
算法·动态规划
水饺编程1 小时前
第5章,[Win32 章节] :贝塞尔样条曲线(一)
c语言·c++·windows·visual studio
Wang's Blog2 小时前
PostgreSQL笔记49:向量检索核心算法、索引调优与过滤策略深度解析
笔记·算法·postgresql
疯狂打码的少年2 小时前
【数据结构】交换类排序:冒泡与快速排序
数据结构·笔记·算法·排序算法
Nil2082 小时前
leetcode 108有序数组转换为二叉搜索树
数据结构·算法·leetcode
高频因子挖掘机2 小时前
QuantDash 成交量单位统一实战:从“手”到“股”的跨市场量化数据清洗全流程
后端·算法·github