用现成函数进行二分查找

2017-07-17 12:00:12

writer:pprp

题目:找到你想要的数的

代码如下:

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
      //test
      int n  ;
      int a[10000];
      cin >> n ;

      for(int i = 0 ; i < n ; i ++)
      {
            cin >> a[i];
      }

      sort(a,a+n);

      for(int i = 0 ; i < n ; i++)
      {
            cout << a[i] << endl;
      }
      int x;

      unique(a,a+n);

      cin >> x;
      cout << lower_bound(a,a+n,x)-a +1<< endl;

    return 0;
}

lower_bound()返回一个 iterator 它指向在[first,last)标记的有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个不小于value 的值。该函数为C++ STL内的函数。

所以如果需要取得某元素下标,需要先用sort函数进行排序,然后得到所需元素下标

时间: 2024-11-05 18:48:00

用现成函数进行二分查找的相关文章

python函数:递归函数及二分查找算法

本文和大家分享的主要是python的递归函数及二分查找算法相关内容,一起来看看吧,希望对大家学习python有所帮助. 一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? """ print(s) story() story() 老和尚讲故事 递归的定义 -- 在一个函数里再调用这个函数本身.这种魔性的使用函数的方式就叫做 递归 . 递归的最大深度:997 1.python递归最大层

【C++】【STL】二分查找函数

binary_search 这个函数的返回值是布尔型,也就是最简单的找到了就为真,没找到就是假. 传入参数有三个,数据集合的左端点,数据集合的右端点,查找的值. 注意这些左端点右端点是要求左开右闭原则的,就是和数学上的左开右闭区间[a, b)一样,右端点是个不会被查阅的值. 一般来说写法类似: bool flag = false; int data[n] = {...};///数据 sort(data, data + n); flag = binary_search(data, data + n

0518Python基础-内置函数-二分查找

1.昨日内容回顾 len() 测试个数 eval() 去掉字符串的引号,返回内部结果 eval('1+1') ---> 2 exec() 去掉字符串的引号,执行内部代码 ret = ''' if True: print(666) ''' exec(ret) range next() iter() reversed() 返回的是迭代器 sorted(iterable,key,reverse)  return list       key zip(iter1,iter2,iter3....) 拉链方

STL二分查找函数的应用

应用二分查找的条件必须是数组有序! 其中二分查找函数有三个binary_serch,upper_bound,lower_bound 测试数组 int n1[]={1,2,2,3,3,4,5}; int n2[]={5,4,3,3,2,2,1}; binary_serch 没有什么好说的,这个很简单,接受三个参数first,last,key三个值.如果在数组中查询到的话,那么就返回1否则返回0 代码 if(binary_search(n1,n1+7,3)) cout<<1<<&quo

二分查找之新手篇——函数使用

首先介绍c++万能头文件 #include<bits/stdc++.h> using namespace std;(比较适合偷懒,但是不能确保不会出错)(用还是可以的,粗错了再回头来改嘛) 接下来介绍一下两个二分查找函数: upper_bound()与lower_bound(): ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法(函数)返回一个非递减序列[first, last)中

#STL函数学习:二分查找函数/去重函数

二分查找lower_bound() :https://blog.csdn.net/qq_40160605/article/details/80150252 https://www.jianshu.com/p/cb0d5488bb6a 去重函数: https://www.cnblogs.com/wangkundentisy/p/9033782.html https://www.cnblogs.com/hua-dong/p/7943983.html 原文地址:https://www.cnblogs.

二分查找

递归版(在区间[x, y)中找v的位置) 1 //递归版二分查找 2 int bsearch(int * A, int x, int y, int v) 3 { 4 5 if(v<a[x] || v>a[y-1]) return -1; 6 int m = x + (y-x)/2; //此处能不能用int m = (x+y)/2,需要仔细考虑(暂时想不到原因) 7 if(A[m]==v) return m; 8 else if(A[m]>v) return bsearch(A, x, m

二分查找总结

最近刷leetcode和lintcode,做到二分查找的部分,发现其实这种类型的题目很有规律,题目大致的分为以下几类: 1.最基础的二分查找题目,在一个有序的数组当中查找某个数,如果找到,则返回这个数在数组中的下标,如果没有找到就返回-1或者是它将会被按顺序插入的位置.这种题目继续进阶一下就是在有序数组中查找元素的上下限.继续做可以求两个区间的交集. 2.旋转数组问题,就是将一个有序数组进行旋转,然后在数组中查找某个值,其中分为数组中有重复元素和没有重复元素两种情况. 3.在杨氏矩阵中利用二分查

深入浅出数据结构C语言版(12)——从二分查找到二叉树

在很多有关数据结构和算法的书籍或文章中,作者往往是介绍完了什么是树后就直入主题的谈什么是二叉树balabala的.但我今天决定不按这个套路来.我个人觉得,一个东西或者说一种技术存在总该有一定的道理,不是能解决某个问题,就是能改善解决某个问题的效率.如果能够先了解到存在的问题以及已存在的解决办法的不足,那么学习新的知识就更容易接受,也更容易理解. 万幸的是,二叉树的讲解是可以按照上述顺序来进行的.那么,今天在我们讨论二叉树之前,我们先来讨论一种情形.一种操作:假设现在有一个数组,数组中的数据按照某