2019春季面试题

  • 猴子选王
    n个猴子,数到m个踢出,最后剩下的一个为王

思路是借助技术器,在数组上循环移动标记,如果标记点为负数则跳过,最后数组中剩下的最后一个不为负数的数就是王。

count = 0;
circle_c = 0;
i = 0;
while(circle_c<n){
   // 标记点为负数则跳过
   if(array[i]>-1){
      count++;
   }

   if(count==m){
     array[i] = -1;
     circle_c ++;
   }
   
   i++;
   
   // 移动标记到初始位置
   if(i>n-1){
      i = 0;
   }

}
  • 有序链表合并
    2个有序的单向链表合并为一个有序的单线链表
    如:
    A 9-8-6-4
    B 5-3-2-1
    合并后:C 9-8-6-5-4-3-2-1

思路是链表的方向以及顺序和合并后的方向和顺序要一致,所以需要找到2个链表谁可以作为根节点,然后分别用2个指针p1,p2在链表A、B上移动,每次把最大的放入c链表中。最后返回的是根节点。

p1 = nodeA;
p2 = nodeB;
root = c;
// 寻找根节点
if (p1->data > p2->data) {
   root->next = p1;
   p1 = p1 ->next;
} else {
   root ->next = p2;
   p2 = p2 ->next;
}
p = root->next ; 
while( p1 && p2 ){
    if( p1->data > p2->data ){
       p->next = p1;
       p1 = p1->next;
    } else {
      p->next = p2;
      p2 = p2->next;
   }
   p = p->next;
}

// 把待合并链表中剩余的节点放入C链表
if(p1){
   p->next = p1;
}
if(p2){
   p->next = p2;
}

return root;// 单向链表,返回根节点
  • 用栈实现队列
    用栈这种数据结构实现队列。

思路;栈是先进后出,队列是先进先出。所以2个栈可以实现队列的效果。比如输入:321,放入栈 A : 123 放入栈B:321,也就是栈A输入,栈B输出。
涉及栈A和栈B的锁,比如栈B满时,栈A不能再向栈B放元素;如果栈A满时,不能输入的同时,需要向栈B放入元素。如果栈B在输出,栈A不能向栈B放元素;栈A在输入时,从栈A取元素

  • 有一个n边形(p0,p1,p2,),每一边都是垂直或者水平德线段,现在给定数值k,以p0为起点将n边形德周长分为k段,每段长度相同,请打印所有的k等分点(T0,T1,T2,)的坐标。

T为等分点,P为节点

思路:没有很好的思路,so sad

  • 单向链表的计算
    单向链表表示十进制整数,求2个正整数的和,比如1234+34= 1268;注意单向链表的方向,不允许使用其他数据结构。
    单向链表A 1->8->5->4
    +
    单向链表B 3->5->7
    结果链表C 2->2->1->1

思路:先比较链表AB的长度,如果长度不等先赋值(比如C开始就是1->null);从8这位开始操作2个链表,先计算下一位(直到找到最后一位开始计算);先计算4+7,然后进位给前一位,递归调用重复。
最后C链表是:1->12->1->1,所以为了进位需要遍历整个链表进行重整,如果节点的值大于10进位取余;得到2->2->1->1。

  • 有一组不同高度的台阶,由一个整数表示,数组中每个数是台阶的高度,当开始下雨了,台阶之间的水坑会积水多少?如数组【0,1,0,2】积水1.
    在这里插入图片描述

思路:这题蛮简单,找到距离最近的两个较大的元素相减得到步长,然后乘以高度(较大2个元素中高度较小的),再减去2个元素间不为0的数。比如上例中3-1=2-1=1,(在X轴上)步长为1.高度为2-1=1,所以1*1=1,元素3和元素1之间的元素2没有高度所以1-0=1,积水为1.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值