[LeetCode] 每日一题 2239. 找到最接近 0 的数字
题目链接
题目描述
给你一个长度为 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
解题思路
今天这道题非常简单,我们可以通过一次遍历模拟来解决。核心思路就是遍历整个数组,逐个判断每个数字与零的距离。如果某个数字的绝对值更小,我们更新答案;如果绝对值相等,我们返回最大的那个数字
具体步骤:
初始化答案为数组中的第一个元素
遍历数组中的每一个数字:
如果当前数字的绝对值比已记录答案的绝对值小,那么更新答案为当前数字
如果绝对值相等,则取最大值
最终返回记录的答案
代码实现
class Solution {
public int findClosestNumber(int[] nums) {
int ans = nums[0];
for (int num : nums) {
if (Math.abs(num) < Math.abs(ans)) {
ans = num;
} else if (Math.abs(num) == Math.abs(ans)) {
ans = Math.max(ans, num);
}
}
return ans;
}
}
复杂度分析
时间复杂度:O(n),因为我们只需要遍历一次数组,时间复杂度为 O(n),其中 n 是数组的长度
空间复杂度:O(1),我们只使用了常数空间来保存当前的最接近零的数字,因此空间复杂度为 O(1)
总结
这道题相对简单,直接使用单次遍历即可解决问题。关键是对比绝对值,并在遇到相同绝对值时选取最大值。通过这道题,可以巩固数组遍历和条件判断的技巧,同时也提醒我们在一些问题中,要特别注意选择合适的比较策略
希望这篇分享能为你带来启发!如果你有任何问题或建议,欢迎在评论区留言,与我共同交流探讨。
License:
CC BY 4.0