除了二分法以外还有如下几种算法
1.快速幂算法O(logN):求a^n%b
- 利用递归
- 二进制的做法——非递归,比较巧妙
2.辗转相除法O(logN):最大公约数,最小公约数
3.分解质因数O(根号N):n和x/n因子成双成对出现,只需循环到根号N
4.分块检索法O(根号N):可以次优解,最优解是logN级别,可以将长度为N的区间分为根号N的大小的小区间,总共根号N个小区间,每个小区间统计局部的数据,因此在这些区间中进行增删改查的效率是O(根号N)
两个排序数组的中位数
快速幂算法
一个数组长为n,一个数组长为m,至少需要O(n+m),可以想到优化为O(log(n+m)),中位数下标为(n+m)/2,设为k,所以可以优化时间复杂度为logk。
分别对数组取k/2进行抛弃。
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int size=nums1.size()+nums2.size();
if(size%2==1){