跳至主要內容

2239. 找到最接近 0 的数字


2239. 找到最接近 0 的数字

🟢   🔖  数组  🔗 力扣open in new window LeetCodeopen in new window

题目

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

解题思路

  1. 初始化变量

    • 用变量 diff 来记录当前最小的绝对值差距,初始化为正无穷大。
    • 用变量 res 来记录最终结果。
  2. 遍历数组

    • 对数组中的每个数字,计算其绝对值。
    • 如果当前数字的绝对值比 diff 小,则更新 diffres
    • 如果当前数字的绝对值等于 diff,则需要比较当前数字和结果 res 的大小,选择较大的那个数字(优先选择正数)。
  3. 返回结果

    • 遍历完成后,返回 res

复杂度分析

  • 时间复杂度O(n),其中 n 是数组长度,遍历一次数组。
  • 空间复杂度O(1),使用了常量级变量 diffres

代码

/**
 * @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+🟠🀄️open in new window 🔗open in new window