常见面试题

题目来源:https://www.nowcoder.com/discuss/134826?type=all&order=time&pos=&page=1

  1. 堆排序
  2. sqrt的实现
  3. 单链表的复制,
  4. 实现一个hash class,
  5. 一个整数的二进制表示翻转输出,6(110)转换后 3(011)
  6. lower_bound 的实现
  7. 一个k*k的矩阵,每行取一个数相加,总有k的k次方种和,求出所有的和中的前k个小的和。
  8. 单元最短路径
  9. 给定多个pair<节点, 父节点> 构建还原多叉树
  10. string 转int
  11. int 转string
  12. 带随机指针的链表的复制
  13. 有序数组的部分翻转(如456123)查找指定值,(数组含有的元素重复与不重复)
  14. memcpy实现
  15. 链表的环路,判断以及环路的入口点
  16. 给定一个string数组,判断给定string同构的个数
  17. I am a student 翻转成 student a am I
  18. 有序数组查找超过一半的元素
  19. 数组的中位数
  20. 二分查找
  21. 在数据量(n)很大的情况下,求n个数的平均数(大整数问题)
  22. 汉诺塔
  23. 24点和
  24. 循环队列的实现
  25. 寻找两个有序数组的中位数


  • 2.sqrt的实现
    常见方法,二分法,牛顿迭代
    牛顿迭代: Xn+1= Xn - f(X)/f(X)’
    令f(X) = X^2 =a ;
    -> Xn+1 = Xn -(Xn2- a)/ 2Xn = (Xn2 + a ) / 2Xn = (Xn+a/Xn)/2 ;
    double  sqrtNewton( double a)
    {
    		double eps = 0.00000001;
    		if(a< esp)return 0 ;
    		double last = 0;
    		double new =a ;
    		while(abs(new-0) > esp)
    		{
    			last = new;
    			new = (last+ a/last)/2 ;
    		}
    		return new;
    }
    

  • 14,memcpy实现
    注意地址重叠的时候从后向前复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void *Memcpy(void *dst, const void *src, size_t size);

int main(int argc, char *argv[])
{
   char buf[100] = "abcdefghijk";
   //memcpy(buf+2, buf, 5);
   Memcpy(buf+2, buf, 5);
   printf("%s\n", buf+2);
}

void *Memcpy(void *dst, const void *src, size_t size)
{
   char *psrc;
   char *pdst;

   if(NULL == dst || NULL == src)
   {
       return NULL;
   }

   if((src < dst) && (char *)src + size > (char *)dst) // 自后向前拷贝
   {
       psrc = (char *)src + size - 1;
       pdst = (char *)dst + size - 1;
       while(size--)
       {
           *pdst-- = *psrc--;
       }
   }
   else
   {
       psrc = (char *)src;
       pdst = (char *)dst;
       while(size--)
       {
           *pdst++ = *psrc++;
       }
   }

   return dst;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值