腾讯面试题(统计数字出现的次数问题)

时间:2014.04.28

地点:基地二楼

日志:知道自己没有尝试着去试图改变,晓得错了~~

----------------------------------------------------------------

一。题目:

给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数

要求下排每个数都是先前上排那十个数在下排出现的次数。

上排的十个数如下:

【0,1,2,3,4,5,6,7,8,9】

举一个例子,

数值:0,1,2,3,4,5,6,7,8,9

分配:6,2,1,0,0,0,1,0,0,0

0在下排出现了6次,1在下排出现了2次,

2在下排出现了1次,3在下排出现了0次....

以此类推..

----------------------------------------------------------------

二、解析:

迭代法,就是不断地迭代和更新。先设置一个初始化数组,数据随意,随后不断的更新和调整数组,最后会收敛到一个稳定值,底部数组不再发生变化为止,但一直不收敛则表示无解。完成的源码实现如下:

#include<iostream>
using namespace std;
int GetDataCount(const int arr[], size_t size, int target);
//PRECONTION:
//POSTCONDITION:
//FACILITIES LIBRARY USED:

bool UpdateCountArray(int arr[], size_t size);
//PRECONTION:
//POSTCONDITION:
//FACILITIES LIBRARY USED:
void FinalCountArray(int arr[], size_t size);
//PRECONTION:
//POSTCONDITION:
//FACILITIES LIBRARY USED:
int main()
{
	int top_array[10];
	for (size_t i = 0; i < 10; ++i)
		top_array[i] = i;
	int bottom_array[10] = { 0 };
	FinalCountArray(bottom_array, 10);
	for (auto e : bottom_array)
		cout << e << ‘\t‘;
	return 0;
}

bool UpdateCountArray(int arr[], size_t size)
{
	bool change_occur = false;
	int frequency = 0;
	for (size_t i=0; i < size; ++i)
	{
		//bool change_occurr = false;
		frequency = GetDataCount(arr, size, i);
		if (frequency != arr[i])
		{
			arr[i] = frequency;
			change_occur = true;
		}
	}
	return change_occur;
}
int GetDataCount(const int arr[], size_t size, int target)
{
	int count = 0;
	for (size_t i = 0; i < size; ++i)
	{
		if (target == arr[i])
			++count;
	}
	return count;
}
void FinalCountArray(int arr[], size_t size)
{
	bool change = true;
	while (change)
		change = UpdateCountArray(arr, size);
}

腾讯面试题(统计数字出现的次数问题),码迷,mamicode.com

时间: 2024-08-27 05:02:54

腾讯面试题(统计数字出现的次数问题)的相关文章

Uva1640(统计数字出现的次数)

题意: 统计两个整数a,b之间各个数字(0~9)出现的次数,如1024和1032,他们之间的数字有1024 1025 1026 1027 1028 1029 1030 1031 1032 总共有10个0,10个1,3个3等等. 解法: 这类问题的一般步骤都是先用f(n,d)计算出0~n中d数字出现的次数,那么答案就是f(b,d)-f(a-1,d) 下面程序中的注释为(1,2974)的第一层(未递归)解释,递归后同理 1-2974 拆分为1-2970  和 2971-2974 1 #include

腾讯面试题,10分钟排填数值(转)

2019转眼就结束了,很多小伙伴正在为明年的金三银四找工作而操劳,也有的小伙伴在准备着2020年的实习.而进入国企,事业单位.BAT.500强这都是很大部分人选择.而在求职或求实习的过程中,很多职场新人都希望看到职场老鸟的一些实际求职经历以及经验心得.我们一起来看一下下面这位求职者的分享. 据该职场人描述,自己接到腾讯的面试通知,在笔试的过程中,一道算法题做不出来.所以前来求助. 腾讯面试题: 给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数,要求下排每个数都是先前上排那十个数在下

腾讯笔试题:满二叉排序树,任给3个子节点,找他们最大的公共父节点

腾讯笔试题出现了和这个类似的题目,没做出来,现在来好好解决这个问题吧,先从基本的开始. 先吐槽一下:感觉算法设计什么的,真的超级难,也许是我头脑太笨,转不过弯来吧,呵呵. 题目是这样的:一棵满二叉排序树,有K层,节点的值依次为 1~2k-1.现在告诉你树的高度是4层,给定你3个节点,比如9,11, 13,那么最大的公共父节点是12. 现在想起来这题我已经想出来一半了呀,但是大概人在紧张的时候大脑会思维短路,跳不出原有的思维陷阱.想法是这样的: 1. 首先是从根节点开始,如果给的三个叶节点的值其中

统计数字noip2007

7909:统计数字 总时间限制:  1000ms 内存限制:  65536kB 描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果. 输入 包含n+1行:第一行是整数n,表示自然数的个数:第2~n+1每行一个自然数. 40%的数据满足:1<=n<=1000:80%的数据满足:1<=n<=50000:100%的数据满足:1<=n

统计数字问题

问题描述: 一本书的页码从自然数1开始顺序编码直到自然数n.书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0.例如第6页用6表示而不是06或006. 数字统计问题要求对给定书的总页码,计算出书的全部页码中分别用到多少次数字0,1,2,3,.....9. 算法分析: 比如,对于一个数字34567,我们可以这样来计算从1到34567之间所有数字中每个数字出现的次数:从0到9999,这个区间的每个数字的出现次数可以使用原著中给出的递推公式,即每个数字出现4000次. 从10000到19999

统计数字

原题链接:https://www.luogu.org/problem/show?pid=1097 纪念开学第一天,随手A掉一道大水题纪念一下. 题意非常明显,让我们排序并且统计数字,但数据量较大. 一开始想到最暴力的桶排序,但发现桶排序开不了那么大的数组,A不掉. 遂STL快排解决之.问题就在如何统计重复数字上. 受到夏令营day1t1启发,快排后统计数字,每次和前边的进行比较,如果相等则当前数字重复,开一个vis数组打上标记,开一个b数组外带一个附带指针t,用来记录重复数字重复出现了几次.如果

7909:统计数字

7909:统计数字 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果. 输入 包含n+1行:第一行是整数n,表示自然数的个数:第2~n+1每行一个自然数. 40%的数据满足:1<=n<=1000:80%的数据满足:1<=n<=50000:100%的

1164 统计数字

1164 统计数字 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description [问题描述]某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果. 输入描述 Input Description 第1行是整数n,表示自然数的个数.第2~n+1 行每行一个自

统计数字在排序数组中出现的次数

统计一个数字在排序数组中出现的次数: 可定义一个用于统计数字个数的变量count,然后从前往后遍历数组,看是否与所求数字相等,如果相等,则count++: 下面贴出代码: public class Solution {     public int GetNumberOfK(int [] array , int k) {         int count = 0;        for(int i=0;i<array.length;i++){            if(array[i]==k