当前位置:网站首页>分治法求解中位数
分治法求解中位数
2022-08-03 06:34:00 【干饭小白】
来先上代码:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
if(nums1.size() > nums2.size()){ //如果nums1的长度大于nums2,则交换
return findMedianSortedArrays(nums2,nums1);
}
int len1 = nums1.size();
int len2 = nums2.size();
//分割线左边的元素的个数,如果是奇数我们让左边的个数多一个
int total_left = (len1 + len2 + 1) / 2; //向下取整
//我们在长度小的那个数组里找分割线,那么长度大的一定含有分割线
//[0,len1]
int left = 0;
int right = len1;
//我们是不是要确定 left 和 right 的位置呀
//我们在这层循环里只寻妖考虑短的那一边 [0,len1]-->在这里面找分割线
while(left < right){
int i = left + (right - left + 1)/2; //从中间开始-->第一个数组里去的个数
int j = total_left - i; //从第二个数组里取的个数
if(nums1[i - 1] > nums2[j]){
right = i - 1; //那么分割线所在的区间一定为[0,i-1]
}else{
left = i;
}
}
//判断结果
int i = left; //-->第一个数组里分割线左边的个数
int j = total_left - i; //-->第二个数组里分割线左边的个数
//第一个数组左边最小的和右边最大的
int nums1LeftMax = i== 0 ? INT_MIN : nums1[i - 1];
int nums1RightMin = i== len1 ? INT_MAX : nums1[i];
//第二个数组左边最小的和右边最大的
int nums2LeftMax = j== 0 ? INT_MIN : nums2[j - 1];
int nums2RightMin = j== len2 ? INT_MAX : nums2[j];
if((len1 + len2) % 2 == 0){ //偶数个-->左边最大的和右边最小的和
int ans1 = max(nums1LeftMax,nums2LeftMax);
int ans2 = min(nums1RightMin,nums2RightMin);
return double((ans1 + ans2)/2.0);
}else{//奇数个-->左边最大大的
return (double)max(nums1LeftMax,nums2LeftMax);
}
}
};
边栏推荐
猜你喜欢
伦敦银现货市场如何使用多条均线?
MySQL必知必会
数仓埋点体系与归因实践
El - tree to set focus on selected highlight highlighting, the selected node deepen background and change the font color, etc
海思项目总结
Cesium loads offline maps and offline terrain
QT信号与槽
深入理解IO流(第一篇)
torch.nn.modules.activation.ReLU is not a Module subclass
调用feign报错openfeign/feign-core/10.4.0/feign-core-10.4.0.jar
随机推荐
ISIJ 2022收官,中国初中生再展风采
戳Web3的神话?戳到铁板。
El - tree to set focus on selected highlight highlighting, the selected node deepen background and change the font color, etc
uniapp 请求接口封装
spark中Repartition 和 Coalesce 区别
关于NOI 2022的报到通知
CDGA|如何加强数字政府建设?
FiBiNet torch reproduction
Laravel 中使用子查询
第六章:存储系统
nacos-2.0.3启动报错出现no datasource set的坑
Charles capture shows
solution 解决plt.imshow()不显示图片cv2.imshw()不显示图片
excel高级绘图技巧100讲(二十一)- Excel层叠柱形图
MySQL必知必会
在线开启gtid偶发hang住的问题解决
信息学奥赛一本通T1449:魔板
信息学奥赛一本通T1453:移动玩具
升级
调用feign报错openfeign/feign-core/10.4.0/feign-core-10.4.0.jar