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++面试题:判断数组是否存在重复元素

Problem: given an array in length of N, in which theelements are integers distributed from 1 to N, ...
  • liangliang8086
  • liangliang8086
  • 2014年05月22日 23:09
  • 2987

找出数组中重复次数最多的数

方法一:如果相同的数是连续出现 从第一个数开始,与它后面的数比较,如果相同,计算+1,如果不等,计数置为1.同时保持此时的计数次数和此时的元素; #include int Search(int ...
  • Allenalex
  • Allenalex
  • 2013年09月01日 17:19
  • 4196

Python:数字在排序数组中出现的次数

牛客网上的剑指 offer的在线编程: 题目描述 统计一个数字在排序数组中出现的次数。 # -*- coding:utf-8 -*- ''' 数字在排序数组中出现的次数 题目...
  • Lynette_bb
  • Lynette_bb
  • 2017年07月20日 02:26
  • 299

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

在排序数组中,找出给定数字的出现次数 比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。 乍一看,挺简单的,遍历...
  • u010039377
  • u010039377
  • 2014年06月15日 23:30
  • 1227

J2EE面试题之 java如何找出一个int数组中出现次数最多的数字以及出现次数?

代码如下: package test; import java.util.Arrays; import java.util.HashMap; import java.util.Iter...
  • suyu_yuan
  • suyu_yuan
  • 2016年09月11日 10:22
  • 964

《剑指Offer》面试题:统计一个数字在排序数组中出现的次数

题目 题目描述: 统计一个数字在排序数组中出现的次数。 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小。1...
  • u010412719
  • u010412719
  • 2015年09月12日 22:23
  • 1239

数字在排序数组中出现的次数 java

题目描述 统计一个数字在排序数组中出现的次数。 解题思路 数组是排序的,所以重复出现的数字是相邻排列的。 用二分查找算法,找到第一次出现的位置,和 最后一次出现的位置。 判断第一次出现的位置...
  • samjustin1
  • samjustin1
  • 2016年07月17日 16:05
  • 1376

找出数组中出现次数超过一半或者超过1/3的元素

1、找出数组中出现次数超过一半的元素 int majorityElement(const vector& nums) { int m; int count = 0; for (auto num...
  • ouyangjinbin
  • ouyangjinbin
  • 2016年04月06日 23:02
  • 1784

在排序数组中找给定数字出现的次数和任意整数有几种分解方法

题目: 在排序数组中,找出给定数字的出现次数,时间效率越高越好,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。 题目:求出任意一个整数分解方法有多少种?...
  • ganyingxie123456
  • ganyingxie123456
  • 2017年04月02日 21:27
  • 424

数组中超过出现次数超过一半的数字以及超过三分之一的两个数字,超过四分之一的三个数字

//============================================================================ // Name : 100题...
  • damotiansheng
  • damotiansheng
  • 2016年07月09日 19:32
  • 1295
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++之数组篇1:对排序数组找出指定数字出现的次数
举报原因:
原因补充:

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