剑指offer-面试题53_1-在排序数组中查找数字-二分查找
时间:2019-12-23
本文章向大家介绍剑指offer-面试题53_1-在排序数组中查找数字-二分查找,主要包括剑指offer-面试题53_1-在排序数组中查找数字-二分查找使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/* 题目: 统计一个数字在排序数组中出现的次数。 */ /* 思路: 1、从前往后遍历,时间复杂度O(n)。 2、二分查找到目标数字target,向前向后遍历,时间复杂度O(n)。 3、利用二分法,递归找到数字出现的第一个位置和最后一个位置,时间复杂度O(logn)。 */ #include<iostream> #include<cstring> #include<vector> #include<algorithm> #include<map> using namespace std; int getFirstOfK(vector<int> &A,int start,int end, int target){ if(start > end) return -1; int mid = (start + end) / 2; if(A[mid] > target){ return getFirstOfK(A,start,mid-1,target); }else if(A[mid] < target){ return getFirstOfK(A,mid+1,end,target); }else{ if(mid == 0 || A[mid-1] != target){ return mid; }else{ return getFirstOfK(A,start,mid-1,target); } } } int getLastOfK(vector<int> &A,int start,int end,int target){ if(start > end) return -1; int mid = (start+end) / 2; if(A[mid] > target){ return getLastOfK(A,start,mid-1,target); }else if(A[mid] < target){ return getLastOfK(A,mid+1,end,target); }else{ if(mid == end || A[mid+1] != target){ return mid; }else{ return getLastOfK(A,mid+1,end,target); } } } int getNumbersOfK(vector<int> &A, int target){ int first = getFirstOfK(A,0,A.size()-1,target); int last = getLastOfK(A,0,A.size()-1,target); if(last != -1 && first != -1){ return last - first + 1; } return 0; } int main(){ vector<int> a = {1,1,3,4,4,4,5}; cout<<getNumbersOfK(a,1); }
原文地址:https://www.cnblogs.com/buaaZhhx/p/12088286.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何使用GOLDENGATE构建数据库的审计表之一
- [java][Servlet]Servlet 简介-Servlet 到 Spring MVC 的简化之路-Servlet/Tomcat/ Spring 之间的关系
- oracle19c安装脚本.
- GOLDENGATE EXTRACT在DATABASE SWITCHOVER后表现以及处理方案
- JAVA中的23种设计模式(GOF)
- 机器学习第3天:预测汽车的燃油效率
- Oracle GoldenGate 19 Microservices安装、配置以及简单数据同步
- 最小覆盖子串
- 通配符匹配
- LaTeX多行注释
- [886]mysql查询以某个字符开头
- 不同路径问题
- 信号量及其应用
- 岛屿问题
- 跳水板