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

LeetCode 每日一题笔记

0. 前言

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

1. 题目理解

问题描述

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

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

示例

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

输出:1

解释:nums[4] = 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 存在,无需处理不存在情况。
相关推荐
超级码力6661 天前
【Latex文件架构】Latex文件架构模板
算法·数学建模·信息可视化
ZC跨境爬虫1 天前
跟着 MDN 学 HTML day_9:(信件语义标记)
前端·css·笔记·ui·html
穿条秋裤到处跑1 天前
每日一道leetcode(2026.04.29):二维网格图中探测环
算法·leetcode·职场和发展
Merlos_wind1 天前
HashMap详解
算法·哈希算法·散列表
汉克老师1 天前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
OBiO20131 天前
Cell | 突破AAV载体容量限制!路中华/姜玉武/刘太安团队开发AAVLINK系统实现大基因递送
笔记
Yzzz-F1 天前
Problem - 2205D - Codeforces
算法
智者知已应修善业1 天前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
Halo_tjn1 天前
Java Set集合相关知识点
java·开发语言·算法
sakiko_1 天前
UIKit学习笔记5-使用UITableView制作聊天页面
笔记·学习·swift·uikit