携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情
题目描述
给你一个整数数组 nums (下标 从 0 开始 计数)以及两个整数 target 和 start ,请你找出一个下标 i ,满足 nums[i] == target 且 abs(i - start) 最小化 。注意:abs(x) 表示 x 的绝对值。
返回 abs(i - start) 。
题目数据保证 target 存在于 nums 中。
来源:力扣(LeetCode)
- 示例 1
输入:nums = [1,2,3,4,5], target = 5, start = 3
输出:1
解释:nums[4] = 5 是唯一一个等于 target 的值,所以答案是 abs(4 - 3) = 1 。
- 示例 2
输入:nums = [1], target = 1, start = 0
输出:0
解释:nums[0] = 1 是唯一一个等于 target 的值,所以答案是 abs(0 - 0) = 0 。
- 示例 3
输入:nums = [1,1,1,1,1,1,1,1,1,1], target = 1, start = 0
输出:0
解释:nums 中的每个值都是 1 ,但 nums[0] 使 abs(i - start) 的结果得以最小化,所以答案是 abs(0 - 0) = 0 。
提示:
- 1 <= s.length <= 100
- s 只包含小写英文字母和数字。
- 对所有 奇数 下标处的 i ,满足 shift(s[i-1], s[i]) <= 'z' 。
思路分析
题目给出一个整数数组nums和两个整数target、start,根据这两个整数在数组nums找出第i个元素离target距离最近的;规则是这样的:满足 nums[i] == target 且 abs(i - start)最小化,然后返回abs(i - start)。
声明一个变量res,表示最后结果的最小值;res用Infinity赋值Infinity表示最大值,后面方便比较大小;开始循环数组nums,如果循环项的值等于target,那么就代表已经找到了这个值了,剩下就需要往前退一位,计算abs(i - start)的值,求出绝对值,并与res比大小,取出较小的一位即可,再赋值给res,这样res就是我们的目标值了。
AC代码
function solution( nums, target, start ) {
let res = Infinity;
for(let i=0; i<nums.length; i++) {
if(nums[i] === target) {
res = Math.min(res, Math.abs(i - start));
}
}
console.log(res);
}
let nums = [1,2,3,4,5], target = 5, start = 3;
solution( nums, target, start );