一,基本问题
给一个有序大数组,求某个数字最左出现的位置,或最右出现的位置。
基本思想是利用二分查找算法,
先利用二分查找算法找到首次出现的位置,
如果找最左位置则,记录上次搜索到的位置,循环搜索从左边界到上次出现的位置左边一个位置中的给定数据,直到找不到为止,输出记录的上次位置
如果找最右位置则,记录上次搜索到的位置,循环搜索从右边界到上次出现的位置右边一个位置中的给定数据,直到找不到为止,输出记录的上次位置

2,代码

/*************************************************************************> File Name: getpos.cpp> Author:18510665908@163.com > Created Time: 2018年04月13日 星期五 19时17分30秒************************************************************************/
#include<iostream>
using namespace std;
int binary_search(int data[],int begin,int end,int num)
{int left = begin;int right = end;int mid = -1;int pos = -1;while(left<=right){mid = (left+right)/2;if (data[mid]<num){left = mid+1;}else if (data[mid]>num){right = mid-1;}else if (data[mid]==num){break;}}if (left<=right)pos = mid;return pos;
}
int getPos(int data[],int len,int num)
{int left=0,right=len-1;int curpos=-1,prepos=-1;curpos=binary_search(data,left,right,num);while(curpos!=-1){prepos=curpos;
#if 0//计算后边位置left=curpos+1;right=right;
#elseleft=left;right=curpos-1;
#endifcurpos=binary_search(data,left,right,num);}return prepos;
}
int main(int argc,char *argv[])
{int data[]={0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,7,7,7,7,7,7};cout<<endl<<getPos(data,50,1)<<endl;return 0;
}

大数组查左连界

大数组,找某数字的左,右边界相关推荐

  1. 剑指Offer53-Ⅰ—在排序数组中查找数字

    剑指Offer53-Ⅰ 题意 统计一个数字在排序数组中出现的次数. 解法1-暴力循环 class Solution { public:int search(vector<int>& ...

  2. 【LeetCode】剑指 Offer 53 - I. 在排序数组中查找数字 I

    [LeetCode]剑指 Offer 53 - I. 在排序数组中查找数字 I 文章目录 [LeetCode]剑指 Offer 53 - I. 在排序数组中查找数字 I 一.二分法 总结 一.二分法 ...

  3. Java第三大的数,Java通过排序找出数组第三大数字

    Java通过排序找出数组第三大数字 1 方式一:对数组进行排序并返回第三大数字 通过对数组进行排序并返回第三大数字,我们可以找到java中的第三大数字.让我们看看完整的示例,以找到java数组中的第三 ...

  4. java如何找重复数字_Java如何找出数组中重复的数字

    题目描述:找出数组中重复的数字,具体内容如下 在一个长度为n的数组里的所有数字都在 0~n-1的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复了几次.请找出数组中任意 ...

  5. 剑指offer答案 c语言,剑指offer之C语言不修改数组找出重复的数字

    1  题目 不修改数组找出重复的数字 在一个长度为N+1的数组里面的所有数字都在范围1~N范围内,所以数组至少有一个数字是重复的,请找出重复数字,但是不能修改输入的数组. 2  思路 思路1: 我们开 ...

  6. 单片机8x8点阵让数字0从右到左依次显示循环

    用的单片机是普中的开发板,8x8点阵用的是74hc595进行段选,P0口位选 74hc595资料点击打开链接 8x8点阵用的是共阴极(左边的) 这次我要实现的是让数字0从右到左依次显示 #includ ...

  7. 《剑指offer》--二维数组中的查找、从头到尾打印链表、重建二叉树、旋转数组的最小数字

    一.二维数值中的查找: 1.题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数 ...

  8. es6 数组找最大值_自学Java笔记_day04_第四章 数组

    4.1 数组的相关概念和名词(了解) 1.数组(array): ​ 一组具有相同数据类型的数据的按照一定顺序排列的集合. ​ 把有限的几个相同类型的变量使用一个名称来进行统一管理. 2.数组名: ​ ...

  9. 算法练习day20——190411(重建二叉树、斐波那契数列、跳台阶、矩形覆盖、变态跳台阶、旋转数组的最小数字、矩阵中的路径)

    1.重建二叉树 根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. preorder = [3,9,20,15,7].inorder = [9 ...

  10. 《剑指offer》-- 和为S的连续整数序列、和为S的两个数字、左旋转字符串、翻转单词顺序列

    一.和为S的连续整数序列: 1.题目: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100 ...

最新文章

  1. pandas改变dataframe的列的顺序、改变数据列的排列次序
  2. BZOJ1575: [Usaco2009 Jan]气象牛Baric
  3. Redis整合Spring Data Redis 开发key和value乱码
  4. hdu 2036 计算多边形面积
  5. fastJson性能测试
  6. python中什么是关键字参数_如何使用python语言中函数的关键字参数的用法
  7. 黑客是否可以攻击被拔掉网线的电脑?
  8. 台式电脑打不开计算机c盘,电脑c盘打不开进不了系统怎么办
  9. matlab exprnd函数,Matlab 用 exprnd 函数生成符合指数分布的随机数
  10. linux系统有界面么,linux系统界面详情介绍
  11. 【Spark】Spark安装详解
  12. HTML让文字在图片上显示
  13. 回溯算法-数独(计算器)
  14. TPshop商城环境搭建(一)
  15. yield 函数的理解
  16. code force 449 div2 C. Nephren gives a riddle
  17. mysql 索引加锁分析
  18. 你绝对不能错过的7款开源硬件架构
  19. 基于Android的人脸识别
  20. python断网重联_Python实现WiFi断线自动重连的方法详解

热门文章

  1. C#JSON格式数据的转换
  2. 【中级篇】Linux下搭建MySQL数据库系统
  3. 娱乐篇第十期:互联网的事情you意思(十)
  4. 【原】oracle11g 客户端安装检测失败问题
  5. linux下编译yacc命令,Lex/Yacc的学习——《编译原理及实践》附录B tiny编译器源码在linux下编译实现...
  6. taro 如何使用dom_taro创建的小程序项目怎么引用ant design mobile UI库
  7. jaxb xml 生成 java_java-如何使用JAXB定制XML导出
  8. Pentium的保护工作方式
  9. 博弈论——Nim游戏
  10. 多项logistic回归系数解释_逻辑回归logistic(含python代码)