news 2026/6/2 3:32:33

LeetCode--Median of Two Sorted Arrays

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode--Median of Two Sorted Arrays

#Median of Two Sorted Arrays

更多技术博客 http://vilins.top/

##题目
There are two sorted arrays nums1 and nums2 of size m and n respectively.

Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

You may assume nums1 and nums2 cannot be both empty.
###Example

nums1 = [1, 3] nums2 = [2] The median is 2.0

###Example

nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5

##分析
这题要求时间复杂度为O(log (m+n)).所以我们需要在遍历一次的一半时间内需要将结果找出来。而且我们不需要额外的申请空间,我们采取的策略是两个数组同时遍历,遍历的过程中同时比较元素的大小,这样我们就可以找出前O(log (m+n))个元素,然后就是我们需要寻找的结果。

##源码

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) { int totalSize = nums1Size + nums2Size; int medianSize = totalSize/2; int a1 = 0, a2 = 0; double result = 0; int t = 1; //当第一个数组为空的时候,再分别讨论奇偶 if(nums1Size == 0) { if(totalSize%2 == 0) { int tag1,tag2; for(int i = 0; i <= medianSize; i++) { if(i == medianSize -1) { tag1 = nums2[i]; } if(i == medianSize) { tag2 = nums2[i]; } } return (double)(tag1+tag2)/2; } else { int tag1,tag2; for(int i = 0; i <= medianSize; i++) { if(i == medianSize) { tag1 = nums2[i]; } } return tag1; } } //当第二个数组为空的时候,再分别讨论奇偶 if(nums2Size == 0) { if(totalSize%2 == 0) { int tag1,tag2; for(int i = 0; i <= medianSize; i++) { if(i == medianSize -1) { tag1 = nums1[i]; } if(i == medianSize) { tag2 = nums1[i]; } } return (double)(tag1+tag2)/2; } else { int tag1,tag2; for(int i = 0; i <= medianSize; i++) { if(i == medianSize) { tag1 = nums1[i]; } } return tag1; } } if(totalSize%2 == 0) { int tag1 = 0, tag2 = 0; for(int i = 0; i <= medianSize; i++) { if((nums1[a1] <= nums2[a2])&&(a1 < nums1Size)||a2 == nums2Size) { if(i == medianSize - 1) { tag1 = nums1[a1]; } if(i == medianSize) { tag2 = nums1[a1]; } a1++; } else{ if(i == medianSize - 1) { tag1 = nums2[a2]; } if(i == medianSize) { tag2 = nums2[a2]; } a2++; } } //printf("%d\n", tag1); return (double)(tag1+tag2)/2; } else { int tag1 = 0; for(int i = 0; i <= medianSize; i++){ if((nums1[a1] <= nums2[a2])&&(a1 < nums1Size)||a2 == nums2Size) { if(i == medianSize ) { tag1 = nums1[a1]; } a1++; } else { if(i == medianSize) { tag1 = nums2[a2]; } a2++; } } return tag1; } }

更多技术博客 http://vilins.top/

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 3:29:07

利用集成学习算法 GBDT 结合特征交叉提升 Python 垃圾回收预测分类准确率

利用集成学习算法 GBDT 结合特征交叉提升 Python 垃圾回收预测分类准确率1. 技术分析 1.1 Python 垃圾回收机制的分类特征分析 Python 的引用计数与分代收集机制产生的运行时特征可用于预测 GC 行为模式。通过特征工程提取关键指标&#xff0c;GBDT 模型可以准确预测下一次 GC …

作者头像 李华
网站建设 2026/6/2 3:21:03

ROS新手避坑:用SolidWorks导出URDF后,Rviz里模型死活不显示的5个排查步骤

ROS机械臂仿真&#xff1a;从SolidWorks到Rviz的5个关键避坑指南当你第一次将精心设计的机械臂模型从SolidWorks导出为URDF&#xff0c;满心期待地在Rviz中查看时&#xff0c;却发现屏幕上空空如也——这种挫败感每个ROS初学者都经历过。本文将带你系统排查五个最常见的问题根源…

作者头像 李华
网站建设 2026/6/2 3:12:12

提示词工程化:从自然语言到生产代码的软件工程实践

1. 从聊天到工程&#xff1a;为什么你的提示词需要被严肃对待如果你在过去一年里尝试过将大语言模型集成到你的产品中&#xff0c;大概率经历过这样的场景&#xff1a;一个精心设计的提示词在测试阶段表现完美&#xff0c;却在发布后因为一个不起眼的用户输入而彻底“翻车”。或…

作者头像 李华