2道算法题

a公司的技术终面挂了,好可惜!没想到最后问的是基础 ,最近也都面了不少家了,很少有问这么基础的问题而且还是在最后一面,在准备面试的时候也是简单粗略的过了一下,因为本身就不难,没想到就踩坑了,太可惜了!哎 面试官的忠告说的很有道理:作为一名程序员,基本功就是写代码,这个能力还是要加强。出来混 还是要还的!!!

也算是获得了一些宝贵的经验吧,就是不知道还有没有下次机会了,真的是很可惜!

 

问题1:手写二分查找,我真的会啊,可惜面对面编程,一紧张就没发挥好了,哎

def binary_search(key, num_list):

      num_list = sorted(num_list)

      left.right = 0, len(num_list)

      while (left <= right):

            mid = (left + right) / 2

            if num_list[mid] > key:

                  right = mid

            elif num_list[mid] < key:

                  left = mid + 1

          else :

                  return num_list[mid]

        return -1

这是牛客网的代码,个人感觉有问题,网上找了更加优秀的答案:

https://www.cnblogs.com/xwdreamer/archive/2012/05/07/2487246.html

哎 试错成本太高了,怎么说呢,很奇怪的感觉,因为这些东西平时可能真不一定用得上,为了面试而突击准备的话难免会有纰漏,况且是最后一轮技术面面这个,弄得我是,哎!最后面试官还冷嘲热讽的,何必呢?

递归实现:

def binary_search(num_list, start, end, value):

      if (start > end):

         return -1     

      mid = (start + end) / 2

     if (num_list[mid] == value):

           return mid

     if (num_list[mid] < value):

            return binary_search(numlist, mid + 1, end, value)

      return binary_search(num_list, start, end - 1, value)

递归实现简单但是数据量一大容易堆栈溢出,这肯定也是面试官接下来的套路

 

迭代实现:

def binary_search(num_list, start, end, value):

    res = -1
    while(start <= end):
        mid = (start + end) / 2
        if (num_list[mid] == value):
            res = mid
            break
        elif (num_list[mid] > value):
            end = mid - 1
        else:
            start = mid + 1

    return res

查了不少资料,光这一个二分查找背后的问题就有无数,看似简单,但是真要写一个完美的二分查抄代码是很难的,上面的代码就漏洞百出,比如 mid = (start + end) / 2 就有可能溢出,可以优化成 mid = end + (end - start) / 2

          

 

问题2:6亿用户,每个用户有一个积分(int类型 0 ~ 10000)如何快速的排序(单机实现)

其实当时想到了一个答案了---位图,但是思路不是很清晰,说出来绝对又是坑自己,所以就用了一个比较通用的方法---分治法+归并排序,面试官的目的肯定不是这个,所以这题就算我挂了

具体答案参考《编程珠玑》

 

 

总结:

真是吃一堑长一智,其实这次我自己都没想到面了2个a的岗位一面都过了,然后这个岗位的同学非常热情的帮助我,另外也是核心部门所以我还拒了最早的那个岗位后期的面试,转而面这个,前面的技术面、代码(sql、mapreduce)和业务面难度都不大,都过了,没想到最后来了这么一招,哎 运气不佳加上自身在基本功上的欠缺吧,你说我怎么办?去锻炼这些所谓的基本功?平时工作还真不一定用得上。为了下一份工作面试做准备?就算是面试我这个方向以及工作的真的10个面试官有2个问这些就不错了,真的很无语的心情

这也给了我一个下次面试(希望真不要有下次了)的一个思路:在梳理清工作内容所涉及的技术和业务的同时要认真刷刷题!为了面试不得已而为之,这次在面试之前还真刷了不少题,奈何面了许多基本都没问,后面就没再刷了 不说了气死了!!!!

不幸中的万幸吧已经拿了一家中小型公司的口头offer(最终还不一定给我,我也在考虑接不接)另外就是a系的另一家公司过了所有业务技术面(hr小姐姐说恭喜我通过3面,等着hrg联系我),和a系的另一家卡在2面评估(个人估计问题不是特别大),供公司进不去略显遗憾,也工作了4年左右了,可能机会也不多了,a系的还剩下几家没投和一家卡在2面评估 现在刷题还来得及 刚把爹 加油吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值