【LeetCode算法练习(C语言)】Median of Two Sorted Arrays
2017-09-09 15:08
405 查看
题目:
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
链接:Median of Two Sorted Arrays
解法:非递归二分归并,时间 O(log (m+n))
Runtime: 45 ms
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
链接:Median of Two Sorted Arrays
解法:非递归二分归并,时间 O(log (m+n))
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) { int cnt = (nums1Size + nums2Size) / 2 + 1; int pos1 = -1, pos2 = -1, tot1 = nums1Size, tot2 = nums2Size; double ans; while (pos1 + pos2 + 2 < cnt) { if (pos1 == tot1 - 1) { if (pos1 + (tot2 + pos2) / 2 + 2 <= cnt) pos2 = (tot2 + pos2) / 2; else tot2 = (tot2 + pos2) / 2; } else if (pos2 == tot2 - 1) { if (pos2 + (tot1 + pos1) / 2 + 2 <= cnt) pos1 = (tot1 + pos1) / 2; else tot1 = (tot1 + pos1) / 2; } else if (nums1[(tot1 + pos1) / 2] < nums2[(tot2 + pos2) / 2]) { if ((tot1 + pos1) / 2 + (tot2 + pos2) / 2 < cnt) pos1 = (tot1 + pos1) / 2; else tot2 = (tot2 + pos2) / 2; } else { if ((tot1 + pos1) / 2 + (tot2 + pos2) / 2 < cnt) pos2 = (tot2 + pos2) / 2; else tot1 = (tot1 + pos1) / 2; } } if ((nums1Size + nums2Size) % 2) { if (nums1[pos1] > nums2[pos2]) ans = (double)nums1[pos1]; else ans = (double)nums2[pos2]; } else { if (nums1[pos1] > nums2[pos2]) { if (pos1 >= 1 && nums1[pos1 - 1] > nums2[pos2]) ans = ((double)nums1[pos1] + (double)nums1[pos1 - 1]) / 2; else ans = ((double)nums1[pos1] + (double)nums2[pos2]) / 2; } else { if (pos2 >= 1 && nums2[pos2 - 1] > nums1[pos1]) ans = ((double)nums2[pos2] + (double)nums2[pos2 - 1]) / 2; else ans = ((double)nums1[pos1] + (double)nums2[pos2]) / 2; } } return ans; }
Runtime: 45 ms
相关文章推荐
- 算法练习(3):Median of Two Sorted Arrays
- 算法分析课每周练习 Median of Two Sorted Arrays
- LeetCode Online Judge 题目C# 练习 - Median of Two Sorted Arrays
- Kotlin实现LeetCode算法题之Median of Two Sorted Arrays
- LeetCode-4-Median of Two Sorted Arrays(C语言实现)
- 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
- Median of Two Sorted Arrays(两个顺序数组求中位数)
- Leetcode 4 Median of Two Sorted Arrays
- [Leetcode #4]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
- [Lintcode] Median of two Sorted Arrays
- Median of Two Sorted Arrays
- leetcode 4 Median of Two Sorted Arrays(二分+思路)