【拒绝算法PUA】2239. 找到最接近 0 的数字

系列文章目录

【拒绝算法PUA】0x00-位运算
【拒绝算法PUA】0x01- 区间比较技巧
【拒绝算法PUA】0x02- 区间合并技巧
【拒绝算法PUA】0x03 - LeetCode 排序类型刷题
【拒绝算法PUA】LeetCode每日一题系列刷题汇总-2025年持续刷新中

C++刷题技巧总结:
[温习C/C++]0x04 刷题基础编码技巧



LeetCode 2239. 找到最接近 0 的数字

链接

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
-105 <= nums[i] <= 105

解题方法 (vector自定义排序法)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class Solution {
public:
    int findClosestNumber(vector<int>& nums) {
        int ans;
        vector<pair<int, int>> vec; // {数字绝对值, 数字}

        for (auto& n : nums) {
            vec.emplace_back(abs(n), n);
        }

        // 先按照绝对值从小到大排序, 如果绝对值相等, 再按照数字从大到小排序
        std::sort(vec.begin(), vec.end(), [&vec](const pair<int, int>& a, const pair<int, int>& b) {
            if (a.first == b.first) {
                return a.second > b.second;
            }
            return a.first < b.first;
        });

        ans = vec[0].second;

        return ans;
    }
};

int main(int argc, char **argv) {
    Solution obj;

    vector<int> nums1 = {-4, -2, 1, 4, 8};
    int ret1 = obj.findClosestNumber(nums1);
    cout << ret1 << endl;

    vector<int> nums2 = {2, -1, 1};
    int ret2 = obj.findClosestNumber(nums2);
    cout << ret2 << endl;
    return 0;
}

输出:

1
1

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值