开始刷Leetcode

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

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容