微软100题(83)百度面试题_memmove实现

来源:互联网 发布:sql server oracle 编辑:程序博客网 时间:2024/05/01 22:22
第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;}


0 0
原创粉丝点击