自学内容网 自学内容网

LeetCode2239找到最接近 0 的数

题目:

给你一个长度为 n 的整数数组 nums ,请你返回 nums 中最 接近 0 的数字。如果有多个答案,请你返回它们中的 最大值 。

题目分析

题目看似简洁,实则蕴含着一些关键的逻辑判断点。我们的核心任务是遍历数组,逐个对比元素与 0 的距离,距离的衡量方式采用绝对值。因为在数轴上,一个数与 0 的距离就是其绝对值大小。同时,还要留意处理存在多个距离相等的元素这种特殊情况,按要求返回最大的那个。

代码实现 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// 函数定义,用于查找最接近0的数字
int findClosestNumber(int* nums, int numsSize) {
    int closest = nums[0];
    for (int i = 1; i < numsSize; i++) {
        int curAbs = abs(nums[i]);
        int closestAbs = abs(closest);
        if (curAbs < closestAbs) {
            closest = nums[i];
        } else if (curAbs == closestAbs) {
            closest = closest > nums[i]? closest : nums[i];
        }
    }
    return closest;
}

int main() {
    // 示例数组,可以替换此处的数组内容来进行不同情况的测试
    int nums[] = { -4, -2, 1, 3, -1 };
    int numsSize = sizeof(nums) / sizeof(nums[0]);
    int result = findClosestNumber(nums, numsSize);
    printf("最接近0的数(多个时取最大)是:%d\n", result);

    return 0;
}

代码解释

  1. 初始化阶段:
    int closest = nums[0]; 这句代码先将 closest 初始化为数组 nums 的第一个元素。这么做的原因是要为后续遍历对比找一个起始基准,从第一个元素开始逐步筛选出真正最接近 0 的元素。

  2. 遍历循环:
    for (int i = 1; i < numsSize; i++) 从数组的第二个元素(索引为 1)开始遍历整个数组。进入循环体后,先计算当前遍历到的元素 nums[i] 的绝对值 curAbs = abs(nums[i]);,以及当前 closest 的绝对值 int closestAbs = abs(closest);

  3. 比较判断:

    • 当 curAbs < closestAbs 时,意味着当前元素距离 0 更近,所以毫不犹豫更新 closest 为当前元素,即 closest = nums[i]
    • 要是 curAbs == closestAbs,这就表明出现了多个距离 0 相等的元素。按照题目要求,此时要选取较大的那个元素作为 closest,通过三目运算符 closest = closest > nums[i]? closest : nums[i]; 巧妙实现比较并赋值。
  4. 返回结果:
    循环结束后,closest 里存放的就是整个数组中最符合要求的值,最后 return closest; 将其返回。

 


原文地址:https://blog.csdn.net/qq_64604732/article/details/144324409

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!