2019.9.11 VIVO笔试消消乐题解 DFS

//题目: 开心消消乐,输入1 4 2 2 3 3 2 4 1, 返回21(先消3 3,得分为2*2=4;再消2 2 2,得分为3*3=9;再消4 4,得分为4;再消1 1,得分为4; 所以总得分4+9+4+4+4=21)
//方法:DFS
int nDelete(vector<int> boxs) //有n个可以消的地方
{
    int N = boxs.size();
    int n = 0; //有n个可以消的地方
    for (int i = 0; i < N; i++)
    {
        for (int j = 1; i + j < N; j++)
        {
            if (boxs[i] != boxs[i + j])
            {
                i += (j-1);
                break;
            }
            else
            
                if(j == 1)
                    n++;
                continue;
            }
        }
    }
    return n;
}

int score(vector<int> boxs) //得分
{
    int N = boxs.size();
    int size = boxs.size();     //数组大小
    int n = nDelete(boxs); //还有几处可以删除
    if (n == 0) //假如数组没有可以消的了,返回0
    return 0;

    vector<int> res; //里面存的是n种消除的情况,取最终得分最大的输出
    for (int i = 0; i < N; i++)
    {
        int j = 1; //有j个重复的
        for ( ; i + j < N; j++)
        {
            if (boxs[i] != boxs[i + j])
            {
                i += (j - 1);
                break;
            }
        }

        int tempscore = 0; //返回消除当前连续块的得分
        vector<int> newboxs;
        if (j > 1) //有重复的才消除
        {
            for (int k = 0; k < i - j + 1; k++)
                newboxs.push_back(boxs[k]);
            for (int k = i + 1; k < N; k++)
               newboxs.push_back(boxs[k]);

            tempscore += j * j + score(newboxs);
            res.push_back(tempscore);
            if (res.size() == n)
                break;
        }
    }
    auto maxPosition = max_element(res.begin(), res.end());
    int result = *maxPosition;
    return result;
}

int main()
{
    string s;
    getline(cin, s);
    stringstream ss(s);
    vector<int> boxs;
    int temp;
    while (ss >> temp)
    {
        boxs.push_back(temp);
    }

    int num = score(boxs);
    cout << num << endl;
    return 0;
}
#vivo##题解##笔试题目##校招#
全部评论
没这么复杂。leetcode原题
点赞
送花
回复 分享
发布于 2019-09-12 00:54
妈祖游戏 lc
点赞
送花
回复 分享
发布于 2019-09-12 01:09
国泰君安
校招火热招聘中
官网直投
tql
点赞
送花
回复 分享
发布于 2019-09-12 00:38

相关推荐

3.20&nbsp;投递3.21&nbsp;笔试邀请&nbsp;3.27&nbsp;笔试4.8&nbsp;一面&nbsp;4.10出结果约二面4.12&nbsp;二面&nbsp;4.17出结果约hr面4.18&nbsp;hr面4.19&nbsp;oc🔥🔥一面内容电话面,40mins左右,面试官人不错,会补充我没讲到的点并引导我,中间有段表达有点混乱还提醒我注意分点表达1.项目相关●介绍项目●为什么选择completableFuture?还有什么异步查询的方式?countdownLauch和completableFuture类有什么区别?我提到底层实现原理不一样,面试官补充completableFuture可以有返回结果而countdownLauch没有●项目中怎么用mysql和redis的?2.redisredis的数据结构?●跳表如何实现?与树结构相比有什么优势?查询和删除的时间复杂度是多少?3.mysqlob+树相对于b树的优势?相比于红黑树呢?●聚簇索引与非聚簇索引?4.kafka如何保证消息不会丢失?我讲了生产者ack机制,但是没讲到副本,于是面试官通过下面几个问题逐步引导●主从同步过程中leader挂了,怎么办?●有了解过ISR么?ooffset如何实现?●如何保证消息不会重复消费?5.场景题●从上面offset如何实现的问题展开,问如何使用redis或mysql去保证id不重复?我提了redis用分布式锁,mysql用主键或号段模式继续追问是否可以用redis集合实现?布隆过滤器了解吗,能不能用在这个场景下?了解,但是没回答上来,可能是用布隆过滤器先前置地判断两个id是否重复🔥🔥二面内容视频面,深挖项目,问题没啥参考价值,技术上让我介绍下kafka以及如何运用在项目中的🔥🔥HR面内容●&nbsp;&nbsp;自我介绍●为什么不继续留在上家公司实习?●对部门业务有什么了解?如何胜任这份工作?学习或实习中比较有挑战性的case?●过去二十几年里对你影响比较大的人或事?●手里有什么&nbsp;offer?🔥🔥🔥🔥还未投递的老哥欢迎:👉&nbsp;【淘天内推链接】https://talent.taotian.com/campus/qrcode/home?code=L4PGnjjGYz00uX_Ucjt55w==#25届暑期实习##淘天##暑假实习##面经##内推#
查看14道真题和解析 25届暑期实习
点赞 评论 收藏
分享
8 39 评论
分享
牛客网
牛客企业服务