1.二分搜索就是每次尽量去掉数组得一部分元素
2.第一次取K个元素出来,nums1中取 K/2个(不够就全都取出), nums2中取 K - K/2(或nums1.size()),
判断取出的两个数组元素中的末位谁大谁小;
一般情况下:两个数组都取了k/2个元素
那么两个数组的情况就是
k/2-1个数, a ,。。。
k/2-1个数, b ,。。。
假设a<b
(1)则a前面的数一定在最小的k个数中,即第k个数不在a前面
(因为a前面的数一定小于a后面并且小于b和b后面的,所以一定属于最小的k个数中)
(2)b后面的数一定比k个数大,所以第k个数也不在b后面
(3)所以问题就变为在剩下的数中找到第k/2大的数
(4)重复执行,边界条件是nums1或nums2为空或最后只找一个数
网友评论