c++之数组篇1:对排序数组找出指定数字出现的次数

原创 2016年08月31日 14:37:26


//本文来自《程序员面试笔试宝典》何昊等人编著
#include <iostream>
//using namespace std;
int BS(int *a,int length,int num,bool isLeft)
{
	int left = 0;
	int right = length - 1;
	int last = -1;
	while(left <= right)
	{
		int mid = (right + left)/2;
		if(a[mid]<num)
		{
			left = mid +1;
		}
		else if (a[mid]>num)
		{
			right = mid - 1;
		}
		else
		{
			last = mid ;
			if(isLeft)
				right = mid - 1;
			else 
				left = mid + 1;
		}
	}
	return last ;
}

int main()
{	
	int count = 0;
	int arr[] = {0,1,2,3,3,3,3,3,3,3,3,3,3,4,5,6,7,8,13,19};
	int len = sizeof(arr)/sizeof(arr[0]);
	int low = BS(arr,len,8,true);
	int up = BS(arr,len,8,false);
	if((low!=-1)&&(up!=-1))//原书中当统计的数字为数组中的元素时,没有任何错误;但是当统计的数字在数组中没有出现时,容易出现错误。
	{
    count = up - low +1;
	printf("%d\n",count);
	}
	else //当统计的数字在数组中不存在时
		printf("%d\n",count);
	return 0;
}
参考文献:

《程序员面试笔试宝典》何昊等人编著

函数 C++ 找数组a中出现次数最多的值

int maxa(int a[],int n) //返回数组a中出现次数最多的整数,相同出现次数的值,仅返回先出现的那个。n是数组a中元素个数。 { int i,k,maxk=0,max=a[0]; ...

c++在数组中查找元素并返回位置下标,统计某元素出现次数程序

在数组中查找元素并返回位置下标,若找到元素则返回下标(多个相同元素,返回最后一个),没找到返回-1; 统计某元素出现次数程序,没出现返回0;...

【js实现】在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次

今天做笔试题的时候做到了这题,当时由于时间 太短,而且因为没有处理好JavaScript中整数的关系,导致结果没有运行出来。所以在结束之后,在网上搜了资料,发现都是用C语言或者C++,java实现的,...

在排序数组中,找出给定数字的出现次数

比如【1,2,2,2,3】中2出现的次数是3次 #include int search1(int a[],int num,int len)//暴力求解判断比较数组中的数 { int sum=0;...

在排序数组中,找出给定数字的出现次数

/** * 题目:在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。 * 解法:使用二分查找的方法分别找出给定数字的开始和结束位置,最坏情况下时间复杂度...

在排序数组中,找出给定数字的出现次数

public class CountTimesInSortedArray { /** * 题目:在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次...

找出一个数组中出现次数超过一半的那个数字,要求时间复杂度O(n)和空间复杂度为O(1)。

数组中超过出现次数超过一半的数字 题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。  分析:编程之美上也有这道题,不过它变换了题目的表述形式,如下:寻找发帖水王: Tango...

找出数组中出现次数大于一半的数字 Java实现 剑指offer

题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2...

找出数组中出现一半以上次数的数字

网上有很多关于这题的解析,目前我看到最有的解法就是计数删除法,但代码很抽象,比较难理解,下面我谈谈自己理解,主要是为了加深印象。 public int MoreThanHalfNum_Soluti...

java实现找出数组中出现次数超过一半的数字

package Nowcode; /** * 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现...
  • pomay
  • pomay
  • 2017年06月05日 15:33
  • 206
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++之数组篇1:对排序数组找出指定数字出现的次数
举报原因:
原因补充:

(最多只允许输入30个字)