开始刷Leetcode

有点眼高手低了。好多题目两分钟想到算法,两个小时还不一定能写出一个没bug的版本来。

其实还是自己代码水平不行了,这几年代码写得还是少。

算法第4题,求两个排序数组的中位数,有点麻烦。要保证没有bug,简直是费了我九牛二虎之力。

题目本身不算很难,但我一开始也没想到好的办法。如果两个数组长度相同的话是很简单的,貌似还是算法导论的一道习题。这种情况只要不停地做二分法就可以了,复杂度是O(logn)。

但如果两个数组长度不同呢?我陷入了一个误区,纠缠了很久都没想到好的办法,还是在网上搜了一下才恍然大悟。其实只要保证每次两个数组排除掉的元素个数相同就可以了,也就是每次都排除掉短的数组的当前长度的一半即可。

方法是有了,但想实现个没bug的版本也很费劲,主要是因为要照顾到各种情况。两个数组的长度分别都可能为奇数和偶数,这就是四种组合。短数组最后会剩下一个或两个元素,再和长数组的中位数比较,才能得到最终的结果。总之我的解法为了照顾到各种情况十分冗长,if嵌套了好几层,一个方法里面十来个return。不知道有没有更简洁的方法,也许是我对这个问题还没想太透彻,但实在是没力气简化了,就先这样吧。

你可能感兴趣的:(开始刷Leetcode)