第3组百度面试题
1.今年百度的一道题目
百度笔试:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。
要求:空间复杂度O(1),时间复杂度为O(n)。
2.百度笔试题
用C语言实现函数void * memmove(void *dest, const void *src, size_t n)。
memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。
1、一前一后指针,遇到不符合的交换,直到相遇
2、注意覆盖的情况下复制要从后往前执行
void * my_memmove(void *dest, const void *src, size_t n)
{
if(n == 0)
return NULL;
if(dest==NULL || src==NULL)
return NULL;
char* pdest = (char*)dest;
char* psrc = (char*)src;
if(pdest<psrc || pdest>psrc+n)//无覆盖
{
for (size_t i =0;i<n;++i)
{
*pdest = *psrc;
pdest++;
psrc++;
}
}
else
{
pdest = pdest + n;
psrc = psrc + n;
for (size_t i =0;i<n;++i)
{
*pdest = *psrc;
pdest--;
psrc--;
}
}
return pdest;
}