北邮复试_2010_查找

题目描述

输入数组长度 n
输入数组 a[1…n]
输入查找个数m
输入查找数字b[1…m]
输出 YES or NO 查找有则YES 否则NO
如(括号内容为注释)
输入:
5(数组长度)
1 5 2 4 3(数组)
3(查找个数)
2 5 6(查找具体数字)
输出:
YES
YES
NO

分析:本题采用对于模板的数据先进行排序,采用折半查找的方法查找答案
本题参考的折半查找、折半插入的相关博客
https://blog.csdn.net/Gunanhuai/article/details/88934984(查找)
https://blog.csdn.net/guoweimelon/article/details/50904206(插入,此处插入的位置就是left 的位置)

bool t_find(int x, vector<int> nums)
    {
        int low = 0, hight = nums.size() - 1;
        int mid;
        while (low<=hight)
        {
            mid = (low + hight) / 2;
            if (nums[mid] == x)
                return true;
            else if (nums[mid] > x)
                hight = mid - 1;
            else
                low = mid + 1;
        }
        return false;
    }
	void t_Search()
	{
        vector<int> model;
        int m;
        cin >> m;
        int t;
        for (int i = 0; i < m; i++)
        {
            cin >> t;
            model.push_back(t);
        }
        sort(model.begin(), model.end());
        vector<int> nums;
        int n;
        cin >> n;
        for (int i = 0; i < n; i++)
        {
            cin >> t;
            nums.push_back(t);
        }
        bool flag;
        for (int i = 0; i < n; i++)
        {
            if (nums[i] >= model[0] && nums[i] <= model[model.size() - 1])
            {
                flag = t_find(nums[i], model);
                if (flag == true)
                {
                    cout << "YES" << endl;
                }
                else
                    cout << "NO" << endl;
            }
            else
            {
                cout << "NO" << endl;
            }
        }

	}
发布了63 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/luncy_yuan/article/details/104327842