zoukankan      html  css  js  c++  java
  • 携程笔试5.27-1图,2dp

    5.27

    给出有向图:

    找出最多跳过k步,从start节点到end节点的所有路径总数

    /*
    现有n个火车站(2≤n≤50)用编号1~n表示,彼此之间的通车情况用字符串
    "a,b" 表示,如:"2,3" 表示有一条2号车站到3号车站的单程线路。
    现随意给出两个车站序号 xy 和 最大途经中转站个数 k0≤k≤n-2),
    要求计算出 x y 最多中转 k 次的所有线路数量(同一站点不可重复经过)。
    */
    /*
    3
    1,2 2,3 1,3
    1 3
    1
    输出2
    */

    个人思路:使用邻接表保存有向图HashMap(Integer,HashSet):一个节点可达的其他节点。递归深度优先:完成40.

    抽奖:

    给定两个序列:A,B

    A是抽奖序列

    B是中奖序列

    从A的所有连续子串中找到覆盖B的所有元素的最短串,取其中所有最短串中index最靠前的为结果

    例如:假设抽奖序列s为[1,2,5,4,3,4,7,1,4,9,3,1],中奖序列为[3,1,4],其中:

    1、抽奖序列s([1,2,5,4,3,4,7,1,4,9,3,1])中1,2,5,4,3为一个子序列s',长度为5

    2、抽奖序列s([1,2,5,4,3,4,7,1,4,9,3,1])中3,4,7,1为一个子序列s',长度为4

    3、抽奖序列s([1,2,5,4,3,4,7,1,4,9,3,1])中4,9,3,1为一个子序列s',长度为4

    起始位置编号最小的最小子序列为3,4,7,1,其起始位置编号为5,所以获奖者的编号为5

    个人思路:暴力:所有的中奖序列都存在一个数组里:由于数字只有1-9所以数组的长度为10,数组的值表示中奖号码的个数.

    遍历抽奖序列:如果一个数存在中奖序列(在数组中的值>0)那么继续遍历。直到中奖序列全部出现,返回子串的长度,并且返回当前子串的第一个序列的index,

    当找到第二个符合的条件的时候比较串的长度,如果串的长度小于(写的是小于等于,其实没必要,因为index是增长的,长度一样还是不用更新)当期记录的最小长度,则更新index。等于排除了,因为index一直往后加。。。

    通过了30,可能存在了大量的重复计算。需要用dp解决。

  • 相关阅读:
    opencv::绘制-基本几何
    公共盘访问方法(更改用户登录公共盘)
    testlink数据库访问密码修改
    SQL Server外部链接时报错:Error locating serverInstance specified
    SQL server数据库端口访问法
    python模块之wordcloud
    随性练习:python字典实现文本合并
    python模块之numpy
    python模块之openpyxl扩展
    python模块之openpyxl介绍
  • 原文地址:https://www.cnblogs.com/wsZzz1997/p/14825448.html
Copyright © 2011-2022 走看看