其他分享
首页 > 其他分享> > 【网易面试题】二人等价值均分一堆物品后丢弃的最小价值

【网易面试题】二人等价值均分一堆物品后丢弃的最小价值

作者:互联网


title: 【网易面试题】二人等价值均分一堆物品后丢弃的最小价值
date: 2020-08-17
tags:

categories:


参加了2021届网易互联网的秋招内推,分到的是网易云音乐的C++开发(我记得我没有投这么吊的啊。。。)

顺利成章第一批进笔试。

笔试在牛客网,开始之后发卷,上来就是4道算法题,100分钟,其他什么都没有,也太直白了吧。

因为有刷过题,感觉没那么慌了。

另外客观来说,题目其实算是比较放水了,虽然因为我太菜没有看最后一题,但是真的谈不上很难。

第一题,可以在一个字符串右边添加任意次任意字符,求把一个字符串改成回文串后的最短的结果。稍微想想就秒了。

第二题,懵逼了,没做出来,先看第三题。

第三题,一堆人排队买票,此时早上八点整,第i个人单独买票所花的时间记为a[i]秒;或者第i个人顺便给第i+1个人捎带一张(即一起买)所花时间为b[i]秒。求最快所有人买完票后是几点。典型的DP,也是试了下就做出来了,但是问题在于要按标准的时间格式输出此时的时间,hh:mm:ss am/pm。这就很蛋疼,我不会C++库函数的时间格式输出,我这时时间不够了,只能手动算。然后急忙中还把数据集的范围求错了,其实买票可能跨天,但是我算出来以为不会跨天(话说排队买票买超过24小时就离谱)。。。最后数据集只能过65%。觉得自己明明对了,就是过不掉,后来才发现是输出写错了,太蛋疼了。

第二题是重点。题目是,给一个数组,代表一堆物品的价值。现要把这些物品等价值地分给两个人,不能均分的部分就丢弃。求丢弃的物品的最小价值和。

我直接懵了,我的思路被leetcode 的array partition萦绕住了,就是尽可能均分数组的结果,但就是想不出办法从中分离出丢弃的物品。。。除非用超暴力解法,求组合,然后一个个试,但是这样代码会很多,而且不好写。然后时间到交卷了。

突然有一天洗澡时想到了,这个暴力解法递归解不就好了吗。。。

#include <bits/stdc++.h>
using namespace std;

void recur(vector<int> &v, int p1, int p2, int dele, int index, int &res) {
    if (index == v.size()) {
        if (p1 == p2) res = min(res, dele);
        return;
    }
    recur(v, p1 + v[index], p2, dele, index + 1, res);
    recur(v, p1, p2 + v[index], dele, index + 1, res);
    recur(v, p1, p2, dele + v[index], index + 1, res);
}
int main() {
    vector<int> v{1, 2, 3};
    int res = accumulate(v.begin(), v.end(), 0);
    recur(v, 0, 0, 0, 0, res);
    cout << res << endl;
    return 0;
}

太直白了,都不需要我解释了,这顶多算leetcode的medium,没做出来,丢人。

标签:p2,index,面试题,p1,dele,int,res,均分,价值
来源: https://www.cnblogs.com/mingyunyuansu/p/13521233.html