华为一面,2020/8/4

华为技术一面
先介绍项目经历
然后会问项目的你负责的
问难点,解决方法

四个笔试题
1,给出40亿个unsigned int数,再给出一个数,如何快速的判断这个数在不在40亿个数字之中,内存20G(储存数据结构,方法)

用bitmap,映射

2一个数组,奇数放数组前面,偶数放后面,时间O(n),空间O(1)

用两个索引,一前i一后j,a[i]是奇数,i++;不是与a[j]交换,j–,再判断a[i],知道i==j

3,一组数字,有一个元素只出现一次,其余元素都出现两次,如何快速找到那个只出现一次的
空间O(1)->先排序,再找
还有办法做到时间O(n)->暂时不知道,在学习

4,手撕题
给出升序数组,目标数字,找出数组中两个元素的和为目标的下标
考虑时间空间最优

#include<iostream>

using namespace std;

bool getIndex(int num[],int len,int target,int &index1,int &index2)
{
	int i=0;
	bool ret=false;
	while(i<len&&target>num[i])
		i++;
	int j=i-1;
	for(;j>0;j--)
	{
		for(i=0;i<j;i++)
		{
			if(target==num[j]+num[i])
			{
				index1=i;
				index2=j;
				ret=true;
			}
		}
	}
	
	if(ret)
	{
		index1++;
		index2++;
	}
	
	return ret;
}

int main()
{
	int num[4]={2,7,11,15};
	int target=18,index1=0,index2=0;
	bool ret = getIndex(num,4,target,index1,index2);
	if(ret)
		cout<<"index1= "<<index1<<"index2 ="<<index2<<endl;
	else
		cout<<"NONE"<<endl;
	return 0;	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值