第二篇:二分法及习题

看到【在排序数组中寻找一个目标值】,应该立即想到要用二分法,时间复杂度是O(log n)。数组元素个数为偶数时,中间位置索引取中间两个元素的哪一个都无所谓,不影响算法正确性,取start+(end-start)/2即可。

力扣35、搜索插入位置

递归不好,递归有栈溢出风险。 最好用【while循环,符合条件后跳出循环】。大方向的代码能写出来,边界处理不好,debug时间太长。

力扣4、寻找两个正序数组的中位数

思路:在两个数组中各画一条分隔线,使得两数组在分隔线左边的元素个数之和等于分隔线右边的元素个数之和,或者比右边元素个数之和大1,分别对应两数组元素之和为偶数和奇数的情况。这样的分隔线有很多,假设第一个数组有3个元素,第二个数组有5个元素,那么分隔线左右两边的元素个数之和都为4。

分隔线可能的情况如下:

第一个数组的分隔线在最左边,即分隔线左边没有元素,分隔线右边有3个元素,第二个数组的分隔线左边就得有4个元素,右边有1个元素。

第一个数组的分隔线左边有1个元素,分隔线右边有2个元素,第二个数组的分隔线左边就得有3个元素,右边有2个元素。

第一个数组的分隔线左边有2个元素,分隔线右边有1个元素,第二个数组的分隔线左边就得有2个元素,右边有3个元素。

第一个数组的分隔线左边有3个元素,分隔线右边没有元素,第二个数组的分隔线左边就得有1个元素,右边有4个元素。

posted on 2021-10-13 14:37  koushr  阅读(36)  评论(0)    收藏  举报

导航