力扣 - 2239 找到最接近0的数字

力扣 - 2239 找到最接近0的数字

haimian
2024-11-02 / 0 评论 / 15 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年11月02日,已超过168天没有更新,若内容或图片失效,请留言反馈。

这道题说实在的没有做出来,我思路感觉没问题,但是一直解不出来。先丢一下自己的代码还有题目把
给你一个长度为 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

然后我写的代码版本是这个样子的

int Size(int num){
    if(num < 0){
        num = 0 - num;
        return  num;
    }else{ 
        return num;
    }
}
int Compare(int num,int min){
    if(num < min){
        min = num;
    }
    return min;

}
int findClosestNumber(int* nums, int numsSize) {
    int start = 0;
    int min = nums[0];
    for(start;start < numsSize;start++){
        min = Compare(Size(nums[start]),min);
    }
    return min;
}...

但是一直第二个过不去,我不知道为啥。这个问题后面讨论,后来我就看大佬的思路,这里采取一个大佬的办法

int findClosestNumber(int* nums, int numsSize){
    int min = INT_MAX;
    for (int i = 0; i < numsSize; i++) {
        if (abs(nums[i]) < min) {
            min = abs(nums[i]);
        }
    }
    int res = INT_MIN;
    for (int i = 0; i < numsSize; i++) {
        if (abs(nums[i]) == min) {
            if (nums[i] > res) {
                res = nums[i];
            }
        }
    }
    return res;
}

...

很明显大佬的办法更好。
那么我先解读一下大佬的思路历程把
首先大佬先定义了一个最小值,然后循环遍历nums数组,进行min[n]数组和min进行比较最后可以得出min来
接下来 还是说设置一个最小值res,依旧是正常的循环 如果当这俩个值和0的距离是相同的话,那么开始比较。如果A大于的话 那么把num[i] 赋值给 res
最后返回res。不得不说 会Go语言的大佬就是吊

m300efpa.png

0

评论 (0)

取消