360笔试编程交流(第二题没A,求解)
感觉今晚360的笔试很迷...为啥Java还有C++的问题...只能XJBC...然后编程题怒卡第二题...
人比较蠢,实在没想到Case是什么...遂放弃,怒交卷...其实是因为太饿吃饭去了...
(提前40mins交卷,答题时间 1:20mins 左右)
下面三道编程题的做法...欢迎交流...
第一题:算正方形面积
没啥好说的...题目限制的太死了...基本没啥意外情况需要考虑,排序求最大就行。结果记得用 long 就行,题目数据给的是 1e9,防范越界即可。
第二题:看花
用的前缀统计...卡在了一个case死活过不去...感觉非常难受...
做法是用 int[] 统计 i 时刻看到的花的种类。然后Q的时候利用 type[right] - type[left -1] 即可...
但是没 A 求大佬帮忙分析一下。
============================================================================
感谢评论区各位大佬的建议,已经找到前缀统计问题所在了。
反例为:1 2 2 2 2 2 2 3 3 3。 如果统计区间落在 [3, 5] 那么结果就是 0.
同时也有不少人反应说超时的问题,确实根据题目的数据量,如果直接 O(n) 统计是会超时的。
不过也有些人过了...应该是数据规模没卡到位吧...
正确的做法应该是使用 BIT 或者 Segment Tree 来做,这样可以保证在 O(logn) 的时间内完成统计。
应该也是出题人的本意。所以啊...有事没事不要偷懒,觉得可以偷过去...不然就会跟我一样...
============================================================================
看到有挺多人反馈第三题的...这题统一回复一下,用的是 LIS
第三题:求满足条件的最长子序列
想法比较简单,假设A中 X 在 Y 前面,那么B中肯定是反过来的。即是一个逆序。
因此可以直接把B反过来,求数组A和B的 LCS。
但是发现题目给的数据量 N = 50000.直接用普通的 LCS DP 解法肯定超时。
所以改成 LIS 的做法来做。虽然存在退化问题,但是Case里面明显没有包含这个情况。
因为数组中全是 1~n 的元素,并且不重复。所以题目冥冥之***就是在诱导你这么做...
(不过这个诱导是真的...不想过多吐槽...)代码写起来比字符串的快不少就是了。