大众点评网2016校招试题选录

大众点评网的校招题还真有特点,分四部分,第一部分是行测的数字规律类题目,第二部分是行测的图形规律题,第三部分是C++、Java的基础选择题,第四部分是四个编程题。

题目都有时间限制,第一二部分皆是普通的行测题,第三四部分回归到编程题。总的感觉是行测题开始比较简单,后面比较难,程序类题目考了java和C++,我是不会java的,所以就半猜半写了。下面把我记下来的一些题写下来,以飨读者。

1.(C++) 在32位系统下,有如下的结构定义

struct 

{

short x;

int y;

}A;

struct

{

short x;

long y;

char z;

}B;

则cout<<sizeof(A)<<sizeof(B)的执行结果是()

A. 5 12    B. 6 8    C. 8 12     D. 3 7  

解析:

上述问题主要考了结构体的字节对齐问题,A:short 2字节,int 4字节,对齐后,所以sizeof(A)=8,B: short 2字节,long 4字节,char 1字节,对齐后sizeof(B)=12字节。因此选择C

2.有N个未排序的数组成的数组,和一个数sum,我们希望找到两个数,他们的和最接近sum.问时间复杂度为()

A.n  B. nlog(n)  C.n^2  D.n^2long(n)

解析:

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
struct node
{
	int x;//代表元素
	int num;//代笔元素的个数
};
void FindTwoNums(int a[], int n, int sum)//找出最接近sum的两个数
{
	int left, right, error;
	int low=a[0], high=a[0];
	for (int i = 1; i < n; i++)
	{
		if (low>a[i])
		{
			low = a[i];
		}
		if (high<a[i])
		{
			high = a[i];
		}
	}
	vector<node> data(high - low + 1);
	for (auto& it:data)
	{
		it.num = 0;
		it.x = 0;  
	}
	for (int k = 0; k < n;k++)
	{
		data[a[k] - low].num++;
		data[a[k] - low].x = a[k];
	}
    int	i = 0;
	int j = high - low;
	left = data[i].x;
	right = data[j].x;
	error = abs(left + right - sum);
	while (i<j)
	{
		while (i<j&&data[j].num==0)
		{
			j--;
		}
		while (i<j&& data[i].num==0)
		{
			i++;
		}
		if (data[i].x+data[j].x==sum)
		{
			cout << "两个数已找到,他们分别是" << " " << data[i].x << " "<<data[j].x << endl;
			return;
		}
		else
		{
			if (abs(data[i].x+data[j].x-sum)<error)
			{
				left = data[i].x;
				right = data[j].x;
				error = abs(left + right - sum);
			}
			if (data[i].x + data[j].x>sum)
			{
				data[j].num--;
			}
			else
			{
				data[i].num--;
			}	
		}
	}
	cout << "两个数已找到,他们分别是" << " " << left << " " << right << endl;

}

int main()
{
	int a[] = { 2, 5, 6, 6,8, 10 };
	FindTwoNums(a, 5, 9);
	return 0;
}

选A





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值