83.第3组百度面试题
1.今年百度的一道题目
百度笔试:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。
要求:空间复杂度O(1),时间复杂度为O(n)。
2.百度笔试题
用C语言实现函数void * memmove(void *dest, const void *src, size_t n)。
memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。
分析:
由于可以把任何类型的指针赋给void类型的指针
这个函数主要是实现各种数据类型的拷贝。
思路:
1.在100-54中已经讨论过了。
2.
在C/C++标准库函数中存在该函数,它用于将src指向的n个字节的数据拷贝到dest位置。在标准库函数中还存在另外一个函数memcpy,它也用来实现内存拷贝,但它不考虑区间重叠问题,在拷贝过程中可能造成重叠错误。
而memmove则针对上诉问题给出了一定的处理措施来防止拷贝出错:
(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝
(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝
(3)当源内存的首地址小于目标内存的首地址时,实行反向拷贝
下面给出memmove的具体实现,关于memcpy可参考库函数实现或相关资料。