开启掘金成长之旅!这是我参与「掘金日新计划 · 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)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
-
这道题考察了什么思想?你的思路是什么?
这道题目还是比较简单的,我的思路就是设置一个最小值flag,然后遍历数组,判断是不是负数,如果是负数,就将其取反,然后与最小值进行比较。如果不是负数,就直接和最小值进行比较!
下面看看这个思路能不能解决并通过所有测试点!
-
做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?
不是一次通过的,对于示例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
-
有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?
将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]
}
四、总结:
这道题目还是需要耗费一定时间的,大家可以尝试去做一做!
作者:掘金酱
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。