题解 | #和为S的两个数字# 基于“有序集合”的剪枝和查找

和为S的两个数字

https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b

#include <set>
#include <vector>
class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        // 先创建一个空数组,为了应对特殊情况的返回值
        vector<int> res;
        int n = array.size();
        if(n == 0 || sum <= array[0]) return res;
        // 创建集合,通过 “集合查找” 这个方便的工具进行搜索
        set<int> se;
        for(const auto& i:array){
            se.insert(i);
        }
        for(int i=0; i<n; i++){
            // 剪枝:无论是输入还是这个集合(默认升序)都是有序的,因此可以剪枝
            if(sum <= array[i]){
                return res;
            }else{
                // 分别处理符合条件与不符合条件的情况
                if(se.find(sum-array[i]) != se.end() ){
                    res.push_back(array[i]);
                    res.push_back(sum-array[i]);
                    return res;
                }else{
                    se.erase(array[i]);
                }
            }
        }
        return res;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 13:47
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
我是没经验的毕业生,这啥情况啊会不会是hr在刷kpi
JamesGosli...:字节boss属于是群发了,我都快入职字节了,其他部门还在和我boss打招呼
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务