题解 | #查找#

查找

https://www.nowcoder.com/practice/8e0c0e8c78944847be9bca54b59d713f

#include<bits/stdc++.h>
#include <vector>
#include <set>
#include <iostream>
using namespace std;
int main(){
	set<int>s;
	//write your code here......
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < n; ++i)
	{
		int num;
		cin >> num;
		s.insert(num);
	}
	int i = 0;
	while (i < m)
	{
		int k;
		cin >> k;
		auto it = s.upper_bound(k);
		if (it != s.end())
			cout << *it;
		else
		 	cout << -1;
		cout << endl;
		++i;
	}

	return 0;
}

原来定义了一个匿名函数,用的find_if来实现的,没想到超时了,使用upper_bound就可以了.

其他牛友的题解也很巧妙:

int flag=0;
    set<int>::iterator it;
    while(m--){
        cin>>temp;
        it=s.find(temp);
        if(it==s.end()){
            s.insert(temp);
            it=s.find(temp);
            flag=1;
        }
        it++;
        if(it==s.end())cout<<-1<<endl;
        else cout<<*it<<endl;
        if(flag){
            flag=0;
            it--;
            s.erase(it);
        }
    }

如果所寻找的元素不在原来的set里,就插入进来,然后判断这个元素插入的位置,通过it++看是不是插到了末尾,如果是说明原来的set没有元素大于它,输出-1,否则就就输出当前it对应的元素。最后要记得用erase把元素删除

C++题解 文章被收录于专栏

记录在牛客网用C++刷题的题解思路

全部评论

相关推荐

2024-12-30 19:21
已编辑
University of California Berkeley Java
无敌低代码大王:简历技术栈可以写清楚点,然后你想要优化项目的话,最好找一些其他同样类型的项目提取它的亮点然后加到你的项目去,比如登陆模块,别人用session,redis做登陆,你可以改成用微信扫码的方式登陆,只需要了解业务逻辑就好,不用去实现。
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
黑皮白袜臭脚体育生:简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写,要么不加头像,加了就用本人照片,这个照片显得不太正式
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务