前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >欢聚时代笔试题,滴滴出行编程题

欢聚时代笔试题,滴滴出行编程题

作者头像
流川疯
发布2019-01-18 16:27:39
6840
发布2019-01-18 16:27:39
举报

感谢赛码网,奇怪的A题设计,bat一轮大企业过去,没A上去几道。

intel 笔试: 1.单链表逆置,双向链表删除 2.层次遍历二叉树 3.rand4()生成rand9() 4.非常多的各种指针操作。

面试:完全的问项目

1.stl boost c++中的智能指针,以及其实现原理?

2.b 树的插入

3.代码实现stack 的排序,只能用stack 的基本操作

乐港面试:

服务器实时排名?(和完美世界一个样子) 为啥下午5点review code 的问题。

代码语言:javascript
复制
// testofrecursive.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
using namespace std;


class A
{
	int a;
	char c;
public:
	void foo(){cout<<"a foo"<<endl;}
	virtual void fool(){cout<<"a fool"<<endl;}
};
class B:public A
{
	int a;
	char c;
public:
	void foo(){cout<<"b foo"<<endl;}
	void fool(){cout<<"b fool"<<endl;}
};


void func(int k)
{
	if (k>0)
	{
		cout<<k;
		func(k-1);
		cout<<endl;
		func(k-1);
		//func(k-1);
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
	func(4);
	int size = sizeof(A);

	A *a = new A;
	B *b = new B;


	b->fool();

	b = (B *)a;
	a->foo();
	b->foo();
	b->fool();
	
	return 0;
}

完美世界笔试,面试:

1.c++强制类型转换: http://www.cnblogs.com/alexqdh/archive/2011/06/09/2075713.html 2.inline函数优缺点:

面试:滑动窗口,服务器实时排名,为什么想做服务器后台开发?数组中第k大的数,阻塞和非阻塞

研究所: 说说你的规划,走技术路线,成为一个T字形的人才(这个回答应该会能impressive 面试官)

中移动物联网:

1T数据的高效传输方案

兆芯:

滴滴出行,编程题,要求找到数组中连续和等于0的,最长子数列:

你应该听说过分治法,正是:分而治之。我们有一个很复杂的大问题,很难直接解决它,但是我们发现可以把问题划分成子问题,如果子问题规模还是太大,并且它还可以继续划分,那就继续划分下去。直到这些子问题的规模已经很容易解决了,那么就把所有的子问题都解决,最后把所有的子问题合并,我们就得到复杂大问题的答案了。可能说起来简单,但是仍不知道怎么做,接下来分析这个问题: 首先,我们可以把整个序列平均分成左右两部分,答案则会在以下三种情况中: 1、所求序列完全包含在左半部分的序列中。 2、所求序列完全包含在右半部分的序列中。 3、所求序列刚好横跨分割点,即左右序列各占一部分。 前两种情况和大问题一样,只是规模小了些,如果三个子问题都能解决,那么答案就是三个结果的最大值。我们主要研究一下第三种情况如何解决:

我们只要计算出:以分割点为起点向左的最大连续序列和、以分割点为起点向右的最大连续序列和,这两个结果的和就是第三种情况的答案。因为已知起点,所以这两个结果都能在O(N)的时间复杂度能算出来。

递归不断减小问题的规模,直到序列长度为1的时候,那答案就是序列中那个数字。

代码语言:javascript
复制
// testdidi.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include<iostream>

using namespace std;
int result[10000] = {1,2,3,4,-1,-2,-3,-3,1,2};

int main()
{
	
	
	
	int length = 10;
	int begin = 0;
	int end = 0;
	int max_length = 0;

	int sum = 0;
	for(int i = 0;i <length;++i)
	{
		sum = 0;
		for(int j = i;j <length;++j)
		{
			sum = sum + result[j];
			if ((sum == 0) && (max_length < j-i))
			{
				begin = i;
				end = j;
				max_length = end - begin;
			}

		}
		
	}

		for(int i = begin;i<=end;++i)
		{
			cout<<result[i];
			cout<<' ';
		}
		return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年09月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档