zoukankan      html  css  js  c++  java
  • [编程题]记一下腾讯2017年在线笔试题编程题的思路

    三道题拿分都不难,不过这个在线网页撸代码的熟练度还得再提高一下(做的时候C的调试有时候不灵光, Python编辑器的自动缩进功能肯定有bug...)。

    第一题是给四个数A,B,C,D, 给两种变换操作: 第一种: A, B同时+1, 第二种, A, B同时乘2。问最少几次操作后可以把A和B同时恰好变换成C, D, 没有变换方法就输出-1。

    这道题应该是可以推数学表达式的,应该存在O(logn)甚至O(1)的方法。不过考试拿分起见,就先写一个dfs模拟。

    具体写法就是dfs(A_tmp, B_tmp, level),递归调用dfs(A_tmp + 1, B_tmp + 1, level + 1) 和dfs(A_tmp * 2, B_tmp * 2, level + 1)。全局维护一个最小操作数,并做好剪枝工作,就可以顺利拿分了。

    第二题,题目就是有[1,1,2,2,4,4,..., 2^18, 2^18] ,即从2^0到2^k恰好每个数有两个的可用因子,给一个目标整数N,问从这些因子里部分累加,可以凑成N的总的组合数量。

    这题应该算是整数划分题,不太明白的同学可以搜搜“整数划分”或者看郭炜老师的慕课的DP部分找找感觉。

    但是...我也对这个题型有点生疏了,就想先用dfs试试看。

    同样,为了拿分,就先生成一个长度38的数组arr,里面放[1,1,2,2,...2^18, 2^18]。需要指出的是C语言里这里要用long long。

    然后做dfs模拟,dfs(i)代表取arr[i]作为因子,全局维护一个cntTmp,调用就加return前减。当cntTmp< target(目标和)时遍历dfs(i + 1) 到dfs(37)。

    此外还需要记录dfs路径,构造一个哈希函数,做哈希和校验,以防止dfs搜出重复路径。

    同样,做好剪枝工作,复杂度看着很高啊O(2^(2k))?(是不是啊同志们,这里我没把握)。。。(k有18也太高了)

    然后我发现我的页面的debug系统挂了,输出永远是空,我觉得服务器那边一直就只收到了一个默认代码,这种的:

    int main() {return 0;}

    Ctrl+F5都救不回来。。。

    第三题,给了一个图。求节点0到节点1的最短路。多加了了一个变量k(打对折的机会),意思是在每次走一个edge的时候有机会把edge的cost减半,共k次机会。

    那么维护的状态cost[i]就变成了cost[i][j],意思是到达i且花费了j次打折机会的最小cost。

    本来想快速写一个Bellman-Ford朴素最短路过样例再说,复杂度在O(k * n^2)。

    无奈在第二题用时太长了,导致这题只留了10分钟,没有成功写出能过样例的代码。

    最后,祝大家撸题愉快,找工作顺利。

    就这样,以上。

  • 相关阅读:
    MINA之心跳协议运用
    基于MINA实现server端心跳检测(KeepAliveFilter)
    求职酸甜苦辣:老陈的几次面试经历
    Java中的装箱与拆箱
    深入解析Apache Mina源码(1)——Mina的过滤器机制实现
    MINA 框架简介
    Java 开发 2.0: 现实世界中的 Redis
    mysql与mongodb、redis的性能对比,包含源代码
    80后之迷茫的一代:为什么都想去当公务员?
    NoSQL一致性
  • 原文地址:https://www.cnblogs.com/aweffr/p/7516124.html
Copyright © 2011-2022 走看看