leetcode_median of two sorted arrays
2017-07-06 09:15
323 查看
题目:
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
我的答案:
首先先不考虑一些比较特殊的情况,考虑两个已排序的数组长度都是大于0的,这个题目的目标就是要找到两个已经排序的数组在放在一块排序之后最中间的一个或者两个数的平均值(如果总长度是奇数,就是中间的那个值,如果总长度是偶数,就是中间两个值的平均值),我们不需要对两个数组重新排序,只需要不断比较这两个数组中的值进行排序,并记录比较的次数,拿两个变量a1,a2记录本次与上次比较的结果,当比较次数达到总长度的一半的时候,那两个变量拿两个变量a1,a2记录的值就是我们找到的总序列的中间值,再判读整个序列长度是奇数或者偶数,以此来计算中间值median。这里的特殊情况就是两个数组中有一个是空数组或者两个都是空数组等情况,只要单独处理即可。
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
我的答案:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int m = nums1.size(); int n = nums2.size(); if (m == 0) { if (n == 0) return 0.0; else return n % 2 == 0 ? double(nums2[n / 2] + nums2[n / 2 - 1]) / 2.0 : double(nums2[n / 2]); } else { if (n == 0) return m % 2 == 0 ? double(nums1[m / 2] + nums1[m / 2 - 1]) / 2.0 : double(nums1[m / 2]); } int N = m + n; int flag; if (N % 2 == 0) flag = 0; else flag = 1; int mid = N / 2; int a1, a2 = 0; int i = 0, j = 0, count = 0; if (nums1[0] <= nums2[0]) { a1 = nums1[0]; i++; } else { a1 = nums2[0]; j++; } while ((i<m) && (j<n)) { if (count == mid) { if (flag == 0) return double(a1 + a2) / 2.0; else return double(a1); } a2 = a1; if (nums1[i] <= nums2[j]) { a1 = nums1[i]; i++; } else { a1 = nums2[j]; j++; } count++; } while (i < m) { if (count == mid) { if (flag == 0) return double(a1 + a2) / 2.0; else return double(a1); } a2 = a1; a1 = nums1[i]; i++; count++; } while (j < n) { if (count == mid) { if (flag == 0) return double(a1 + a2) / 2.0; else return double(a1); } a2 = a1; a1 = nums2[j]; j++; count++; } if (flag == 0) return double(a1 + a2) / 2.0; else return double(a1); }思路解析:
首先先不考虑一些比较特殊的情况,考虑两个已排序的数组长度都是大于0的,这个题目的目标就是要找到两个已经排序的数组在放在一块排序之后最中间的一个或者两个数的平均值(如果总长度是奇数,就是中间的那个值,如果总长度是偶数,就是中间两个值的平均值),我们不需要对两个数组重新排序,只需要不断比较这两个数组中的值进行排序,并记录比较的次数,拿两个变量a1,a2记录本次与上次比较的结果,当比较次数达到总长度的一半的时候,那两个变量拿两个变量a1,a2记录的值就是我们找到的总序列的中间值,再判读整个序列长度是奇数或者偶数,以此来计算中间值median。这里的特殊情况就是两个数组中有一个是空数组或者两个都是空数组等情况,只要单独处理即可。
相关文章推荐
- leetcode Median of Two Sorted Arrays
- [leetcode]Median of Two Sorted Arrays
- leetcode 26: Median of Two Sorted Arrays
- LeetCode: Median of Two Sorted Arrays
- LeetCode题目笔记(三) -- Median of Two Sorted Arrays
- LeetCode 4 - Median of Two Sorted Arrays
- [leetcode] Median of Two Sorted Arrays
- [LeetCode] Median of Two Sorted Arrays 解题报告
- LeetCode: Median of Two Sorted Arrays
- LeetCode刷题笔录 Median Of Two Sorted Arrays
- LeetCode Online Judge 题目C# 练习 - Median of Two Sorted Arrays
- leetCode_Median of Two Sorted Arrays
- LeetCode: Median of Two Sorted Arrays
- leetcode 26: Median of Two Sorted Arrays
- LeetCode Median of Two Sorted Arrays
- LeetCode-Median of Two Sorted Arrays
- Median of Two Sorted Arrays-----LeetCode
- [LeetCode题解004]Median of Two Sorted Arrays
- LeetCode —— Median of Two Sorted Arrays
- leetcode-004:Median of Two Sorted Arrays