二分法求两个有序数组中第k大的元素

1.二分搜索就是每次尽量去掉数组得一部分元素

2.第一次取K个元素出来,nums1中取 K/2个(不够就全都取出), nums2中取 K - K/2(或nums1.size()),

判断取出的两个数组元素中的末位谁大谁小;

一般情况下:两个数组都取了k/2个元素

那么两个数组的情况就是 

k/2-1个数, a ,。。。

k/2-1个数, b ,。。。

假设a

(1)则a前面的数一定在最小的k个数中,即第k个数不在a前面

(因为a前面的数一定小于a后面并且小于b和b后面的,所以一定属于最小的k个数中)

(2)b后面的数一定比k个数大,所以第k个数也不在b后面

(3)所以问题就变为在剩下的数中找到第k/2大的数

(4)重复执行,边界条件是nums1或nums2为空或最后只找一个数

你可能感兴趣的:(二分法求两个有序数组中第k大的元素)