LeetCode 每日一题笔记 日期:2026.04.13 题目:1848.到目标元素的最小距离

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.04.13
  • 题目:1848.到目标元素的最小距离
  • 难度:简单
  • 标签:数组

1. 题目理解

问题描述 :

给你一个整数数组 nums(下标从 0 开始)以及两个整数 target 和 start,找出一个下标 i,满足 numsi == target 且 abs(i - start) 最小。

返回最小的绝对值。题目保证 target 一定存在于数组中。

示例:

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

输出:1

解释:nums4 = 5,abs(4-3)=1。

2. 解题思路

核心观察

  • 要找离 start 最近的 target 位置,最小距离一定出现在 start 附近;
  • 可以从 start 位置向左右两边同时遍历,找到第一个 target 就是最近的;
  • 也可以分别向右、向左遍历所有 target,记录最小距离。

算法步骤

  1. 初始化最小距离为一个极大值;
  2. 从 start 向右遍历,遇到 target 就更新最小距离;
  3. 从 start 向左遍历,遇到 target 就更新最小距离;
  4. 遍历完成后返回最小距离。

3. 代码实现

java 复制代码
package com.sheeta1998.lec.lc1848;
class Solution {
    public int getMinDistance(int[] nums, int target, int start) {
        int ans = 999999999;
        for (int i = start; i < nums.length; i++) {
            if (nums[i] == target) {
                ans = Math.min(ans, Math.abs(start - i));
            }
        }
        for (int i = start; i >= 0; i--) {
            if (nums[i] == target) {
                ans = Math.min(ans, Math.abs(start - i));
            }
        }
        return ans;
    }
}

4. 代码优化说明

优化点:提前找到立即返回(最优效率)

从 start 向左右同步扩展查找,找到第一个 target 就直接返回,不用遍历全数组:

java 复制代码
class Solution {
    public int getMinDistance(int[] nums, int target, int start) {
        int n = nums.length;
        int d = 0;
        while (true) {
            int left = start - d;
            int right = start + d;
            if (left >= 0 && nums[left] == target) return d;
            if (right < n && nums[right] == target) return d;
            d++;
        }
    }
}

5. 复杂度分析

  • 时间复杂度 :O(n)O(n)O(n)

    最多遍历一遍数组。

  • 空间复杂度 :O(1)O(1)O(1)

    仅使用常数变量。

6. 总结

  • 核心思路:从起点向两侧查找目标值,取最小距离;
  • 最优解法是逐层向外扩展,找到即返回,效率最高;
  • 本题是简单的数组遍历与绝对值最小化问题。

关键点回顾

  1. 最近距离一定出现在 start 附近;
  2. 左右同时扩展查找是最优方案;
  3. 题目保证 target 存在,无需处理不存在情况。
相关推荐
不会就选b3 小时前
算法日常・每日刷题--<贪心>25
数据结构·算法
andyweike3 小时前
php笔记
开发语言·笔记·php
xian_wwq5 小时前
【学习笔记】等保合规安全基线核查实战
笔记·学习
M78佐菲6 小时前
ARM学习笔记(11)
linux·arm开发·笔记·嵌入式硬件·学习
M78佐菲6 小时前
ARM学习笔记(10)
linux·arm开发·笔记·嵌入式硬件·学习
李游Leo7 小时前
HarmonyOS 7 + ArkUI + RelationalStore 学习笔记:本地数据分层存储与状态持久化架构实践【鸿蒙心迹】
笔记·学习·架构·harmonyos
Cccp.1237 小时前
【leetcode】(七)前缀树和贪心算法
数据结构·leetcode·贪心算法
千里码aicood7 小时前
基于CART算法的图书分类系统设计与实现
数据库·算法·分类
我命由我123457 小时前
经纪人的职业定义
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法