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;
}
代码解释
-
初始化阶段:
int closest = nums[0];
这句代码先将closest
初始化为数组nums
的第一个元素。这么做的原因是要为后续遍历对比找一个起始基准,从第一个元素开始逐步筛选出真正最接近0
的元素。 -
遍历循环:
for (int i = 1; i < numsSize; i++)
从数组的第二个元素(索引为1
)开始遍历整个数组。进入循环体后,先计算当前遍历到的元素nums[i]
的绝对值curAbs = abs(nums[i]);
,以及当前closest
的绝对值int closestAbs = abs(closest);
。 -
比较判断:
- 当
curAbs < closestAbs
时,意味着当前元素距离0
更近,所以毫不犹豫更新closest
为当前元素,即closest = nums[i]
。 - 要是
curAbs == closestAbs
,这就表明出现了多个距离0
相等的元素。按照题目要求,此时要选取较大的那个元素作为closest
,通过三目运算符closest = closest > nums[i]? closest : nums[i];
巧妙实现比较并赋值。
- 当
-
返回结果:
循环结束后,closest
里存放的就是整个数组中最符合要求的值,最后return closest;
将其返回。
原文地址:https://blog.csdn.net/qq_64604732/article/details/144324409
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!