今天早上 10 点钟开始正式笔试,进去后看到一共 3 道题,1个半小时的时间,当时心里还不由得庆幸了一下,还好比模拟的时间好太多了。事实证明我还是年轻了,谁告诉你时间变长了,题目难度不会变的?看完题我整个人都不好了,分分钟想去砸显示器,心里怒吼一句:老子不和你玩了!!!
请容许我深深吸口气冷静下自己,收下我的暴脾气。
下面还是来正经说下题目吧。题目是英文题,下面是我自己的翻译理解,由于不可以跳出界面,也就不可以复制了。以下题目只需完成函数体部分,只允许在线编译。
1. 找苹果
题目概述:一棵树,有 N 个点(1 ~ N),K 个点有苹果,让你帮忙找出一条路径,使得可以拿到最多的苹果,每条边只能走一次,即不可以回头。你可以从任意结点出发,走任意方向。传入 numOfNodes, numOfApples, *appleAtNodes, **connectdNodes
,输出最多苹果数。
思路:因为太菜了,所以只有个大概思路,复杂度还超级高,从有苹果的结点数组中挑选起点,然后递归遍历边集,记录所有路径的苹果数,找出最大值(在递归边集的时候,可以将边集拷贝一份,将走过的边集,赋值为 (0,0),这样可以稍微优化一点);然后比较所有起点的最大值,输出最大值。这个复杂度真的是高得可怕,而且也不是很好写,希望有大佬可以指点一波,学习学习。
2. 最长连续子串
题目概述:给一个二进制的字符串,输入你可以修改的字符个数,输出你可以有多少种方式得到最长的只包含 1 的连续子串。传入 size, allowedChanges, str
。
思路:记录 0 的个数和位置,然后根据可修改的字符个数进行判断可以有多少种方式替换,然后判断是否是当前最长的只包含 1 的连续子串,如果是,则累加计数,否则记录长度,计数器清零。这是唯一一道我上手敲了的题目,然而里面其实有挺多需要特殊处理的地方,最后也没直接过,也就放弃了。
3. 魔法师游历
题目概述:一个州有 n 个城市(0 ~ n-1),州里的路都是双向的,任意两个城市之间最多存在一条直达的道路。魔法师准备游历,他可以施展魔术使得任意两个城市直达的路的距离为 0 ,不过只有 k 次机会,输出最短路径。传入:num, noOfRoad, beginland, endland, numMagic, **citiesDist
。
思路:将这个无向图想象成以起点为根结点,以终点为叶子结点的一棵树,遍历这颗 “树” ,找出连同两个城市所有的路(不允许回头),记录它们经过的边,各边权值和结点数,然后按照权值大小排序,将前 k 个去除,然后累加得到和,找出和的最大值,输出路径。
结语
可惜欧拉大大没有保佑我啊,今天的题真的是难到泪奔,暴怒完后静静呆坐了 30 分钟,把题目记录下来,直接交卷。对不起,可能是我太菜了,不适合做程序员吧。
希望大佬可以分享一下自己的想法,最好有可以运行的代码,不胜感激。顺便膜!!!