美文网首页
9.14小红书上机编程题

9.14小红书上机编程题

作者: HamletSunS | 来源:发表于2019-10-23 23:35 被阅读0次
    1. 小红圈的数量

    给你一个二维矩阵,代表每个用户之间的关系,若彼此都为1,说明是在互相关注,互相关注的成为“朋友”,且朋友具有传递性。朋友之间形成1个小红圈。求小红圈的数量
    输入:
    N+1行,第1行为N,代表有N个用户
    之后的N行是矩阵的数据,代表各个用户之间的关系
    输出:
    小红圈的数量

    我的思路:
    使用并查集,把朋友合并。
    最后数一数多少个独立的集合就可以了

    2.笔记草稿
    给你一组字符串,由英文和(),<构成,()圈起来的部分是注释,不会输出,‘<’是删除,会把有效输出删除,()保证成对出现,<不会影响到括号,求有效输出

    输入:
    一行字符串,例如a<<b(a(<))
    输出:
    最终的有效字符 b
    解释:
    a被删除,
    b输出
    a(<)被一个括号注释掉了

    思路:
    把问题拆分成2部分:
    有效输出部分
    栈部分(用来记录括号,判断是否在注释状态)

    栈部分:
    利用栈去判断是否处于注释状态,注释状态下直接舍弃输入数据,直到遇到‘)’,来更新栈的状态,另外要注意一下遇到新的‘(’还需要入栈)
    有效输出部分:
    1.先判断是否处于注释状态,是的话就检测“()”来判断何时退出
    2.不处于注释状态的话就判断删除操作“<”,注意删除的前提是有元素可以删
    3.不处于注释状态,也不是删除符,那么直接放入有效输出部分

    3.笔记精选
    题目:
    给你n篇笔记的点赞数,要求每篇笔记的编号不能连续,请选出总赞数最多的笔记集合,输出做多的总赞数和选中的笔记数量,若有多种选择方案,输出笔记数量最少的那种方案

    输入:
    一行数据,代表每篇笔记的赞数,例如 1 2 3 1
    输出
    一行数据,2个数字,1个代表总赞数,1个代表笔记数,例如 4 2

    思路:
    动态规划

    解题方法:
    memo[n]代表从[0..n]中去选择,可以选出的最高总赞数
    memo[n]的求取:
    1.要么选择当前笔记el(n)+memo[n-2];
    2.要么不选memo[n-1];
    3.二者取最大值
    以上可以求出最高总赞数

    接下来去求选择的笔记数
    利用回溯法
    因为memo数组已求了出来,接下来就去比对一下,
    因为memo【n】要么是根据el(n)+memo【n-2】求来的
    要么是根据memo【n-1】求来的。所以就可以倒着推回去

    退出条件:
    若n<0,(实际不会出现这种情况)直接返回
    若n==0,那么num++,返回;(因为0之前没数了,既然推到了0,那么一定会选择0)

    递归条件:
    先if判断一下,能否递归memo【n-1】,因为这样选的文章数少;
    若不能递归n-1,就num++代表选中了当前文章,然后去递归memo【n-2】,注意此时赞数ret要减去el(n);

    4.倒卖战利品

    题目:
    有一组N个宝物,宝物有2个属性
    稀有性X,实用性H
    卖给小贩,但小贩很贪心,一旦卖给他一个宝物后,下一个宝物的稀有性和实用性都不能低于上一个宝物,否则小贩就不收了
    求最多能卖给小贩多少个宝物

    输入:
    N
    X1 H1
    ...
    输出:
    个数

    思路:
    贪心算法

    先排序
    然后计算

    相关文章

      网友评论

          本文标题:9.14小红书上机编程题

          本文链接:https://www.haomeiwen.com/subject/rusayctx.html