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