首页 > 其他分享 >二分查找

二分查找

时间:2024-03-13 14:02:22浏览次数:21  
标签:二分 arr NO int mid 查找 YES 输入

题目描述:

输入数组长度 n 输入数组a[1...n]    输入查找个数m    输入查找数字b[1...m]      输出 YES or NO 
查找有则YES 否则NO 。

输入:

输入有多组数据。 每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m,n<=100)。

输出:

如果在n个数组中输出YES否则输出NO。

代码实现:


#include <cstdio>
#include <algorithm>
using namespace std;
int arr[100];  //
bool binarySearch(int n,int x){
    //查到了 返回True  否则返回false
    int left = 0;
    int right = n-1;
    while(left <= right){
        int mid = (left + right)/2;
        if (arr[mid] == x){
            return true;
        }
        else if(arr[mid] > x){
            right = mid - 1;
        }
        else{
            left = mid + 1;
        }
    }
    return false;
}

int main(){
    int n,m;
    while(scanf("%d",&n) != EOF){
        for (int i = 0; i < n; ++i) {
            scanf("%d",&arr[i]);
        }
        sort(arr,arr+n); //排序
        scanf("%d",&m);  //读取数据的数量
        for (int i = 0; i < m; ++i) {
            int x;
            scanf("%d",&x); //每次读取的数据
            if(binarySearch(n,x)){
                printf("YES\n");
            }
            else{
                printf("NO\n");
            }
        }

    }
}

输入
5
1 5 2 4 3
3
2 5 6
输出
YES
YES
NO

标签:二分,arr,NO,int,mid,查找,YES,输入
From: https://blog.csdn.net/Fxxh_/article/details/136677248

相关文章

  • 旅游(最小生成树&二分)---牛客小白月赛69-D
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'#defineinf0x3f3f3f3fconstintN=4e4+5;intn,m,c;intp[N];structnode{ intx,y,w; booloperator<(constnode&t)const{ returnw<t.w; ......
  • find 查找文件并清空文件内容
    简介日常运维操作少不了清理日志这一步骤,但不建议直接rm操作,一个是怕删错,二是如果程序在引用该文件,贸然进行删除会导致文件句柄并未得到释放,会占用额外的存储空间,所以建议用find查找出来进行滞空操作内容注意:以下是示例,记得更换目录第一种方法:find /var/lib/docker/cont......
  • 二分答案&前缀和&差分&离散化(简记)
    二分答案基本codeintFind(intl,intr){ intans,mid; while(l<=r) { intmid=l+r>>1; if(Check(mid))ans=mid,r=mid-1;//舍弃右半部分 elsel=mid+1;//舍弃左半部分 } returnans;}前缀和基本code#inlcude<bits/stdc++.h>usingnamespacestd;intsum[100......
  • 从CF1702E看二分图判断的两种方法
    https://www.luogu.com.cn/problem/CF1702E转化题意把所有数连边,判断是否为二分图。染色法voidsolve(){#definetestsintn;std::cin>>n;std::map<int,std::vector<int>>edge;std::vector<bool>used(n+1);boolok(true);......
  • LeetCode[题解] 1261. 在受污染的二叉树中查找元素
    首先我们看原题给出一个满足下述规则的二叉树:root.val==0如果 treeNode.val==x 且 treeNode.left!=null,那么 treeNode.left.val==2*x+1如果 treeNode.val==x 且 treeNode.right!=null,那么 treeNode.right.val==2*x+2现在这个二叉树受到「污......
  • 02-数组、排序、查找
    数组数组是一种引用数据类型,所以数组对象实际上存储在堆内存当中数组实际上是一种容器,可以容纳多个元素数组中存储的是基本数据类型的数据,或者是引用数据类型的引用(不能直接存储Java对象)长度不可变,起始位置是0,最后一个下标是length-1所有的数组对象都有length属性Java中......
  • 动态链表学习笔记:查找,插入与删除
    目录情境引入:一、数据的查找1.要求:2.思路:3.程序:4.运行:二、数据的插入 1.要求:2.思路: 3.程序: 4.运行:三、数据的删除1.要求:2.思路:3.程序:4.运行四、调整与小结:优化:运行情境引入:        学习了动态链表的输入输出后,若还需要对其进行进一步的操作,......
  • 从CF1730B看题意转化与二分三分
    Problem-1730B-Codeforces贪心解法\(∣a−b∣=\max(a−b,b−a)\)由绝对值的性质易证。那么直接把\(t_i\)算到距离中,转换成求最左和最右“坐标”的中间点的简单问题。//通过把t[i]算到距离中,转换成求最左和最右坐标的中间点的简单情况voidsolve(){#definete......
  • 【算法】【线性表】【数组】在排序数组中查找元素的第一个和最后一个位置
    1 题目给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1,-1]。你必须设计并实现时间复杂度为 O(logn) 的算法解决此问题。示例1:输入:nums=[5,7,7,8,8,......
  • 取反(分块+二分)
    第2题   取反 查看测评数据信息给一个长度是n的数组,a[1],a[2],a[3],...a[n-1],a[n],初始时a数组中所有的元素都为0,下面有两种操作:1.指定一个区间[x,y],把a[x],a[x+1],...a[y]的值取反,即如果a[i]的值为1则把a[i]的值变为0,如果a[i]的值为0则把a[i]的值变为12.指定一个区......