聊聊面试题-编程题目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊面试题-编程题目相关的知识,希望对你有一定的参考价值。

大概是前年的时候,一次出去面试遇到的一道题,但是面试官是我见过的所有面试中,考法挺特别的,其实特别之处呢,是笔试程序后,面试官说回答的是对的,但是面试官立即让我写单元测试,可是但是面试的时候,我是很懵逼的,第一次遇到这种情况,我当时写的是不是一个函数,也不是一个类, 让我单测,为了去单测,我不得不去修改当时的代码,最后单元测试是完成了,但是对于我来说是很尴尬的,我写完就知道当次面试肯定不过的。后来结果也验证了我的猜想,我当时没有对代码进行一定的设计。

首先给大家一个编程题的切题四件套,让大家完美应对所有面试题

  1. 询问细节、边界条件、可能出现的极端错误情况
  2. 所有可能的解法和面试官沟通一下(时间复杂度,最优解)
  3. 写代码
  4. 写过的代码怎么去设计测试

那么今天我来给大家看看这道题目,当时面试官给到的题目是这样的

给定一个list,要求把里面的数字处理成偶数在左边,奇数在右边,不借助其他列表

分析:

        题目是不难,我们知道给定的是一个list,我们要找list的里面的奇偶元素,那我去循环遍历里面的元素。是偶数的我们就移除后在插入。那么我们看看这道题怎么去用代码去实现。

def listto(insert_list):   
   if type(insert_list)==list:        
       if len(insert_list)==1 :            
           if type(insert_list[0]) is not int:                
               return False            
           return insert_list        
       for item in insert_list:            
           try:                
               if item%2==0:                    
                   insert_list.remove(item)     
                   insert_list.insert(0,item)            
           except :                
               return False        
       return  insert_list    
       else:        
           return False

对应的单元测试。

from listone import listto
import unittest, ddt
data = [list: [0], result: [0],list: ["a"], result: False,                 list: 0, result: 0,list: [1, 1], result: [1, 1],
        list: [1, 2], result: [2, 1],list: [1, 2, 3], result:
        [2, 1, 3],list: [1, 2, 3,4], result: False]

@ddt.ddt
class MyTestCase(unittest.TestCase):    
    def setUp(self):        
        pass
    def tearDown(self):        
        pass
    @ddt.data(*data)    
    def test1(self, data):        
        self.assertEqual(listto(data[list]), data[result])

if __name__ == __main__:    
    unittest.main()

到这里这道题,就实现了完毕了。

         其实这只是千万的面试题中的一个特例,也只是很多面试题中的冰山一角。无论是面试,还是工作,我们一定要对代码有一定的设计。设计的代码要有一定的前瞻性。要可以拓展,可以扩充。这里可以总结一下,编程题不仅仅考察大家的代码水平,

  1. 考察遇到问题的沟通能力
  2. 编程思路及编程思想
  3. 编程中代码能力
  4. 代码编写完成后设计测试用例的完善

综合下来才是编程题的得分,希望大家遇到编程题不要害怕,多沟通多思考才是面试重点

字节跳动的一道动态规划面试题

最近公司大量招人,发动了大家的力量。我也跟着一起下载了脉脉,脉脉上好多HR在招人。碰巧看见了一个猎头的动态,说这就是字节的算法面试题,你能做对几道?我大概扫了一眼,考察深度优先搜索(DFS),链表的题目不在少数,动态规划的题目也特别醒目。对DFS,链表相关题目感兴趣的可以看我之前的文章。正好我们昨天在聊动态规划的爬楼梯问题,今天我们也就来聊聊字节面试题中的最长回文子序列问题

题目是这样的:给定一个序列,找到其中最长的回文子序列,并返回该序列的长度。对于一个回文子序列来说,正着读跟倒着读都一样。我们对子序列的定义是,它可以由其它序列删除一些元素或者不删得到,不影响剩余的元素的顺序。

示例 1:

输入:
"abdbca"
输出:
5
一个可能的最长回文子序列为 "abdba"。

示例 2:

输入:
"cddpd"
输出:
3
一个可能的最长回文子序列为 "ddd"。

基本思路

最直接最暴力的方式还是递归出它所有的子序列就好了嘛!虽然这一听就不是太好的主意。

以上是关于聊聊面试题-编程题目的主要内容,如果未能解决你的问题,请参考以下文章

面试题及个人的解法

面试题及个人的解法

面试题及个人的解法

面试题及个人的解法

面试题及个人的解法

剑指offer编程题Java实现——面试题10二进制中1的个数