面试38-数字在排序数组中出现的个数

摘要:
使用namespacestd;intnum);如果(arr[mid]==num)//查找数字;否则,如果(arr[mid]>mid_right;=1)//键1{mid_lft=(左+右)/2;//键2否则,左=mid_lft;

#include<iostream>
using namespace std;
int countOfNumFromSortArr(int arr[],int len,int num);
int main()
{
  int arr[]={0,1,1,2,2,2,2,3,3,3,4};
  int n;
  cin>>n;
  cout<<countOfNumFromSortArr(arr,sizeof(arr)/sizeof(int),n)<<endl;
  return 0;
}
int countOfNumFromSortArr(int arr[],int len,int num)
{
  if(arr==NULL||len==0)
    return -1;
    int left=0;
    int right=len-1;
  int mid;
  while(left<=right) // 查找算法的复杂度为lg(n)
  {
    mid=(left+right)/2;
    if(arr[mid]==num)// 找到该数字;
      break;
    else if(arr[mid]>num)
      right=mid-1;
    else
      left=mid+1;
  }
  if(left>right)// 没有找到该数字
    return 0;

  int first;int last; //用来记录num的第一个和最后一个下标
  int mid_left,mid_right;
  if(arr[mid-1]!=num)
    first=mid;
  else
  {
    left=0;
    right=mid-1; // 上面找到的Num的位置
    while(right-left!=1) // 关键1
    {
      mid_left=(left+right)/2;
      if(arr[mid_left]==num)
        right=mid_left; // 关键2
      else
        left=mid_left;
    }
    if(arr[left]==num)
      first=left;
    else
      first=right;
  }
  if(arr[mid+1]!=num)
    last=mid;
  else
  {
    left=mid+1;
    right=len-1;
    while(right-left!=1)
    {
      mid_right=(left+right)/2;
      if(arr[mid_right]==num)
        left=mid_right;
      else
        right=mid_right;
    }
  if(arr[right]==num)
    last=right;
  else
    last=left;
  }
  return last-first+1;
}

免责声明:文章转载自《面试38-数字在排序数组中出现的个数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux 彻底删除文件及 find命令permission refused问题解决接口测试-自动化-Java-思路下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Array数组

数组主要是用来 存储一组数据的: 1、掌握如何创建数组 2、掌握数组元素的读和写 3、掌握数组的length属性 创建数组的基本方式有两种: 1、使用Array构造函数 语法:new Array() new 是新建创建的意思 小括号()说明: (1)预先知道数组要保存的项目数量 (2)向Array构造函数中传递数组应包含的项。 <script>...

leetcode编程框架——在IDE上模拟leetcode环境

1、为什么写这个为了用IDE!,这样不同的大题,复制粘贴就完事,真正帮你节约大把时间来思考题目。 import sys # 这里写解决问题的代码,和LeetCode就完全一样了 def solve(arr): pass if __name__ == '__main__': # 接收输入的逻辑,这里先把输入接收过来, 两种选择input()和sy...

文本单词one-hot编码

单词->字母->向量 神经网络是建立在数学的基础上进行计算的,因此对数字更敏感,不管是什么样的特征数据都需要以向量的形式喂入神经网络,无论是图片、文本、音频、视频都是一样。 one-hot编码,也就是独热编码,是一种常用的编码手段。在多分类识别的时候,喂入神经网络的标签就是独热码,比如手写数字识别一共有10个分类,某张图片标签是6,则独热码为:...

JS 数组求 最大值、最小值、平均值以及求和方法

function arrMaxNum2(arr) { return Math.max.apply(null, arr); } function arrMinNum2(arr) { return Math.min.apply(null, arr); } function arrAverageNum2(arr) { var sum =...

js解析Json字符串的方法

要把一个xml字符串转(“1,2,3,4,5,6,7,8,1,2”)换成数组的形式,每个值都应该是number类型的,想当然的就用了split方法,结果。。。问题来了,服务器要求数组的值是数字,而split是字符方法,所产生的数组也是字符串,麻烦来了。。这么大的数据量总不能一个一个的for循环parseInt吧,想想就头痛! 天无绝人之路,原来js这...

OptimalSolution(5)--数组和矩阵问题(1)简单

  一、转圈打印矩阵   题目:给定一个整型矩阵matrix,按照转圈的方式打印它。   要求:额外空间复杂度为O(1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10   思路:矩阵分圈处理问题。用...