LeetCode 2239. 找到最接近 0 的数字

86 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情

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

来源:力扣(LeetCode)

链接:leetcode.cn/problems/fi…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

  1. 这道题考察了什么思想?你的思路是什么?

    这道题目还是比较简单的,我的思路就是设置一个最小值flag,然后遍历数组,判断是不是负数,如果是负数,就将其取反,然后与最小值进行比较。如果不是负数,就直接和最小值进行比较!

    下面看看这个思路能不能解决并通过所有测试点!

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    不是一次通过的,对于示例2这种情况,刚开始没考虑,刚开始我用的是flag来记录最小值的min,没有考虑这种情况,后来引入集合m,存储flag,然后增加一个判断。

    通过 52 ms6.4 MBGo2022/12/25 23:02

    解答错误 N/AN/AGo2022/12/25 22:59

    解答错误 N/AN/AGo2022/12/25 22:56

    解答错误 N/AN/AGo2022/12/25 22:55

    后面我想了想是不是用一个整型flag变量就可以了,改了下,果然可以,耗时减少了一半。

    func findClosestNumber(nums []int) int {
        min := 99999999
        flag := 0
        for _,v := range nums {
            if v < 0 && (-1 * v) < min {
                min = -1 * v
                flag = -1
            }
            if v >= 0 && v < min{
                min = v
                flag = 1
            }
    ​
            if v == min && flag == -1{
                flag = 1
            }
            fmt.Println(min)
        }
        return min * flag
    }
    

    执行用时:28 ms, 在所有 Go 提交中击败了11.11%的用户

    内存消耗:6.4 MB, 在所有 Go 提交中击败了100.00%的用户

    通过测试用例:227 / 227

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    将nums中所有数字的绝对值存为一个数组,获得其最小值并确实是否在原数组中

    class Solution:
        def findClosestNumber(self, nums: List[int]) -> int:
            a=[]
            for i in nums:
                a.append(abs(i))
            b=min(a)
            if b in nums:
                return b
            return -b
            
    作者:jovial-dubinsky4vn
    链接:https://leetcode.cn/problems/find-closest-number-to-zero/solution/jiu-hen-tong-su-by-jovial-dubinsky4vn-ky12/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

三、AC 代码:

func findClosestNumber(nums []int) int {
    min := 99999999
    m := make(map[int]int)
    for _,v := range nums {
        if v < 0 && (-1 * v) < min {
            min = -1 * v
            m[-1 * v] = -1
        }
        if v >= 0 && v < min{
            min = v
            m[v] = 1
        }
​
        if v == min && m[v] == -1{
            m[v] = 1
        }
        fmt.Println(min)
    }
    return min * m[min]
}

四、总结:

这道题目还是需要耗费一定时间的,大家可以尝试去做一做!

作者:掘金酱

链接:juejin.cn/post/706970…

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。