文章

[LeetCode] 每日一题 2239. 找到最接近 0 的数字

题目链接

https://leetcode.cn/problems/find-closest-number-to-zero

题目描述

给你一个长度为 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. 初始化答案为数组中的第一个元素

  2. 遍历数组中的每一个数字:

    • 如果当前数字的绝对值比已记录答案的绝对值小,那么更新答案为当前数字

    • 如果绝对值相等,则取最大值

  3. 最终返回记录的答案

代码实现

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