【 LeetCode】4. Median of Two Sorted Arrays
来源:互联网 发布:武汉精神卫生中心 知乎 编辑:程序博客网 时间:2024/05/29 08:14
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)).
Example 1:
nums1 = [1, 3]nums2 = [2]The median is 2.0
Example 2:
nums1 = [1, 2]nums2 = [3, 4]The median is (2 + 3)/2 = 2.5
题目大意:在两个有序数组中找到中位数。
思路1:定义一个新数组,将两个数组合并为一个排序数组,然后找到中位数。
代码实现(思路1):
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int sum = nums1.size()+nums2.size(); double* arr = new double[sum]; int i = 0,j=0; int pos = 0; while(i<nums1.size() && j<nums2.size()) { if(nums1[i] < nums2[j]) { arr[pos++] = nums1[i]; i++; } else if(nums1[i] > nums2[j]) { arr[pos++] = nums2[j]; j++; } else{ arr[pos++] = nums1[i]; arr[pos++] = nums2[j]; i++; j++; } } while(i<nums1.size()) { arr[pos++] = nums1[i++]; } while(j<nums2.size()) { arr[pos++] = nums2[j++]; } if(sum%2 == 0) return ((arr[(sum/2)]+arr[(sum/2)-1])/2); else return arr[sum/2]; }
思路2:(类似二分的思路)
1、保证第1个数组的元素数量最少;
2、先求两个数组的中位数K,然后寻找该位置的数,我们每次都剔除在第K个数之前的数,这样就会达到类似于二分法的效果。
代码实现(思路2):
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2,int K){int sum1 = nums1.size();int sum2 = nums2.size();if (sum1 > sum2)return findMedianSortedArrays(nums2, nums1, K);if (sum1 == 0)return nums2[K - 1];if (K == 1)return min(nums1[0],nums2[0]);int pos = min(sum1, K / 2); int index = K - pos;if (nums1[pos - 1] == nums2[index - 1])return nums1[pos - 1];else if (nums1[pos - 1] < nums2[index - 1]){vector<int> s;int i = pos;for (i; i < sum1; i++){s.push_back(nums1[i]);}return findMedianSortedArrays(s, nums2, K - pos);}else if (nums1[pos - 1] > nums2[index - 1]){vector<int> s;int i = index;for (i; i < sum2; i++){s.push_back(nums2[i]);}return findMedianSortedArrays(nums1, s, K - index);}}double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2){int sum = nums1.size() + nums2.size();if (sum % 2 == 0)return (findMedianSortedArrays(nums1, nums2, sum / 2 + 1) + findMedianSortedArrays(nums1, nums2, sum / 2) / 2);elsereturn findMedianSortedArrays(nums1, nums2, sum / 2 + 1);}
阅读全文
6 0
- [LeetCode]4.Median of Two Sorted Arrays
- LeetCode 4. Median of Two Sorted Arrays
- LeetCode --- 4. Median of Two Sorted Arrays
- [Leetcode] 4. Median of Two Sorted Arrays
- [LeetCode]4.Median of Two Sorted Arrays
- 【leetcode】4. Median of Two Sorted Arrays
- Leetcode-4.Median of Two Sorted Arrays
- LeetCode-4.Median of Two Sorted Arrays
- Leetcode 4. Median of Two Sorted Arrays
- leetcode 4. Median of Two Sorted Arrays
- LeetCode 4. Median of Two Sorted Arrays
- Leetcode 4. Median of Two Sorted Arrays
- Leetcode 4. Median of Two Sorted Arrays
- [leetcode]4. Median of Two Sorted Arrays
- LeetCode-4.Median of Two Sorted Arrays
- [LeetCode]4. Median of Two Sorted Arrays
- leetCode 4. Median of Two Sorted Arrays
- Leetcode 4. Median of Two Sorted Arrays
- 复试计划(中)
- [ubuntu]squid3代理配置
- discuz防灌水设置
- Android制作 9-Patch图片(可调整大小的位图)
- [hdu6063]RXD and math
- 【 LeetCode】4. Median of Two Sorted Arrays
- $.post error
- 使用tomcat做文件路径映射
- 清华大学2007年机试-最小邮票数-1209
- 看完这个,css中position的绝对定位相对定位就懂了
- QML旋转,缩放中心设置
- 把字符串转换成整数
- 斐波那契数列
- 在python,Scikit-learn的SVM算法