2239. 找到最接近 0 的数字
2239. 找到最接近 0 的数字
题目
Given an integer array nums
of size n
, return _the number with the value closest to _0
in nums
. If there are multiple answers, return the number with the largest value.
Example 1:
Input: nums = [-4,-2,1,4,8]
Output: 1
Explanation:
The distance from -4 to 0 is |-4| = 4.
The distance from -2 to 0 is |-2| = 2.
The distance from 1 to 0 is |1| = 1.
The distance from 4 to 0 is |4| = 4.
The distance from 8 to 0 is |8| = 8.
Thus, the closest number to 0 in the array is 1.
Example 2:
Input: nums = [2,-1,1]
Output: 1
Explanation: 1 and -1 are both the closest numbers to 0, so 1 being larger is returned.
Constraints:
1 <= n <= 1000
-10^5 <= nums[i] <= 10^5
题目大意
给你一个长度为 n
的整数数组 nums
,请你返回 nums
中最 接近 0
的数字。如果有多个答案,请你返回它们中的 最大值 。
示例 1:
输入: nums = [-4,-2,1,4,8]
输出: 1
解释:
-4 到 0 的距离为 |-4| = 4 。
-2 到 0 的距离为 |-2| = 2 。
1 到 0 的距离为 |1| = 1 。
4 到 0 的距离为 |4| = 4 。
8 到 0 的距离为 |8| = 8 。
所以,数组中距离 0 最近的数字为 1 。
示例 2:
输入: nums = [2,-1,1]
输出: 1
解释: 1 和 -1 都是距离 0 最近的数字,所以返回较大值 1 。
提示:
1 <= n <= 1000
-10^5 <= nums[i] <= 10^5
解题思路
初始化变量:
- 用变量
diff
来记录当前最小的绝对值差距,初始化为正无穷大。 - 用变量
res
来记录最终结果。
- 用变量
遍历数组:
- 对数组中的每个数字,计算其绝对值。
- 如果当前数字的绝对值比
diff
小,则更新diff
和res
。 - 如果当前数字的绝对值等于
diff
,则需要比较当前数字和结果res
的大小,选择较大的那个数字(优先选择正数)。
返回结果:
- 遍历完成后,返回
res
。
- 遍历完成后,返回
复杂度分析
- 时间复杂度:
O(n)
,其中n
是数组长度,遍历一次数组。 - 空间复杂度:
O(1)
,使用了常量级变量diff
和res
。
代码
/**
* @param {number[]} nums
* @return {number}
*/
var findClosestNumber = function (nums) {
let diff = Infinity,
let res;
for (let num of nums) {
const abs = Math.abs(num);
if (abs < diff) {
diff = abs;
res = num;
} else if (abs == diff && num > res) {
res = num;
}
}
return res;
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
658 | 找到 K 个最接近的元素 | [✓] | 数组 双指针 二分查找 3+ | 🟠 | 🀄️ 🔗 |