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 存在,无需处理不存在情况。
相关推荐
imuliuliang6 小时前
关于数据结构在算法设计中的核心作用解析7
算法
2401_894915538 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
普通网友9 小时前
共识算法实现:从工作量证明到权益证明的演进
算法·区块链·共识算法
FellAveal9 小时前
【Go语言入门学习笔记】Part18.工作池与WaitGroup(也即协程池)
笔记·学习·golang
xqqxqxxq9 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
龙仔7259 小时前
人大金仓OS_Core数据库自动备份实施笔记(银河麒麟Linux)
linux·数据库·笔记·备份·人大金仓
ldmd28410 小时前
地图生成算法(噪声篇-Perlin,Simplex,Value noise)
算法·go·地图生成
国科安芯10 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
小陈phd11 小时前
集成检索介绍
算法