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

张开发
2026/4/21 13:28:39 15 分钟阅读

分享文章

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] 5abs(4-3)1。2. 解题思路核心观察要找离 start 最近的 target 位置最小距离一定出现在 start 附近可以从 start 位置向左右两边同时遍历找到第一个 target 就是最近的也可以分别向右、向左遍历所有 target记录最小距离。算法步骤初始化最小距离为一个极大值从 start 向右遍历遇到 target 就更新最小距离从 start 向左遍历遇到 target 就更新最小距离遍历完成后返回最小距离。3. 代码实现packagecom.sheeta1998.lec.lc1848;classSolution{publicintgetMinDistance(int[]nums,inttarget,intstart){intans999999999;for(intistart;inums.length;i){if(nums[i]target){ansMath.min(ans,Math.abs(start-i));}}for(intistart;i0;i--){if(nums[i]target){ansMath.min(ans,Math.abs(start-i));}}returnans;}}4. 代码优化说明优化点提前找到立即返回最优效率从 start 向左右同步扩展查找找到第一个 target 就直接返回不用遍历全数组classSolution{publicintgetMinDistance(int[]nums,inttarget,intstart){intnnums.length;intd0;while(true){intleftstart-d;intrightstartd;if(left0nums[left]target)returnd;if(rightnnums[right]target)returnd;d;}}}5. 复杂度分析时间复杂度O(n)O(n)O(n)最多遍历一遍数组。空间复杂度O(1)O(1)O(1)仅使用常数变量。6. 总结核心思路从起点向两侧查找目标值取最小距离最优解法是逐层向外扩展找到即返回效率最高本题是简单的数组遍历与绝对值最小化问题。关键点回顾最近距离一定出现在 start 附近左右同时扩展查找是最优方案题目保证 target 存在无需处理不存在情况。

更多文章