zoukankan      html  css  js  c++  java
  • 华为笔试题

    笔试三道算法题(难度依次递增)

    1.有重复字符串(全小写)全排列个数。(易)

    • 组合数学问题:有重集合全排列数(n!/(n1!...nk!))

    例如:abb=>{abb,bab,bba}个数为3,等价于3!/(1!*2!) = 6/(1*2) = 3

    2.长度为M的字符串(全小写),去掉K个字符返回字典序最小的子串(M>=K),如果去掉K个字符之后字符串为空则返回“0”,否则返回删除后字典序最小的子串。(中)

    • 单调栈:维护一个单调递增栈

      • 当入栈元素大于栈顶则入栈,

      • 当入栈元素小于栈顶则栈顶出栈,一直到栈顶比入栈元素小或出栈个数为K时停止入栈。

      • 停止入栈情况

        • 1:字符串遍历结束,但出栈个数小于K,则一直出栈删除到栈中元素为M-K个,在放入StringBuffer中

        • 2:字符串未遍历结束,但出栈个数等于K,则现将栈中元素放入StringBuffer中再将剩余的放入StringBuffer中

      • 最后输出StringBuffer

    例如:字符串为bacaa,去掉2个字符,返回baaa 

    3.n个顶点间有相互连接的m条单行道,每条道路有长度L和路费T。初始条件有顶点个数n,m行的道路连接,长度和路费情况以及初始的路费K。能否从顶点1到顶点n花费路费小于等于K的情况下返回最短路径,如果没有返回-1。(难)

    • 当时没写,思路:可以用dfs暴力搜索出从顶点1出发所有路费小于K所能到达的顶点,最后将能到达顶点n的最小路径得到即可。(会超时吗?不知道)

    例如:

    4 5 6
    1 2 3 2
    1 3 2 3
    1 4 1 8
    2 4 5 3
    3 4 7 2
    
    解释:
    第一行:4个顶点,5条道路,最大花费为6
    第二行:顶点1到顶点2单行道,长度为3路费为2
    ...... 
    
    结果是:从顶点1到顶点4,先从1->2->4,花费为5满足条件,长度为8最小
  • 相关阅读:
    libTIFF 图像读取与保存
    MarkDown写作之嵌入LaTeX和HTML
    R语言学习(一)前言
    Multi-Byte Character Set & Unicode Character Set
    C/C++ ShellExecuteEx调用exe可执行文件
    C/C++中相对路径与绝对路径以及斜杠与反斜杠的区别
    观察者模式
    责任链模式
    桥接模式
    void及void指针含义的深刻解析
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12811856.html
Copyright © 2011-2022 走看看