leetcode Median of Two Sorted Arrays

ゞ 浴缸里的玫瑰 2022-08-05 00:59 277阅读 0赞

题目:

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)).
题目来源:https://leetcode.com/problems/median-of-two-sorted-arrays/

分析:

在两个排好序的数组里面找中位数。中位数的定义是,如果一共奇数个数,则排序后中间的数便是中位数;如果一共偶数个数,则排序后中间的两个数便是中位数。既然两个数组已经排好序,则可以利用merge的思路对两个数组进行排序。当然也可以不存放排序的结果,只记录下排到第几个了就行,当cnt计数器计到中位数的位置了,就得出结果了。

代码:

  1. class Solution {
  2. public:
  3. double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
  4. int n1 = nums1.size();
  5. int n2 = nums2.size();
  6. int med = (n1 + n2)/2;
  7. if((n1+n2)%2 == 1)
  8. med += 1;
  9. int p1 = 0, p2 = 0, tmp = 0, cnt = 0;
  10. while(p1 < n1 && p2 < n2){
  11. if(nums1[p1] < nums2[p2]){
  12. tmp = nums1[p1++];
  13. }
  14. else{
  15. tmp = nums2[p2++];
  16. }
  17. cnt++;
  18. if(cnt == med){
  19. if((n1+n2)%2 == 1)
  20. return (double)tmp;
  21. else{
  22. double next;
  23. if(p1 >= n1)//针对偶数个数字,中间的两个数一个在结尾另一个在开头。
  24. next = nums2[p2];
  25. else if(p2 >= n2)
  26. next = nums1[p1];
  27. else
  28. next = nums1[p1] < nums2[p2] ? nums1[p1] : nums2[p2];
  29. return double(next + tmp) / 2;
  30. }
  31. }
  32. }
  33. while(p1 < n1){
  34. tmp = nums1[p1++];
  35. cnt++;
  36. if(cnt == med){
  37. if((n1+n2)%2 == 1)
  38. return tmp;
  39. else
  40. return (double)(tmp + nums1[p1]) / 2;
  41. }
  42. }
  43. while(p2 < n2){
  44. tmp = nums2[p2++];
  45. cnt++;
  46. if(cnt == med){
  47. if((n1+n2)%2 == 1)
  48. return tmp;
  49. else
  50. return (double)(tmp + nums2[p2]) / 2;
  51. }
  52. }
  53. return 0;
  54. }
  55. };

发表评论

表情:
评论列表 (有 0 条评论,277人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCodeMedian of Two Sorted Arrays

    第四题是找两个已经排序的数组的中位数,其实就是寻找两个排序数组的第k个数。寻找第k个数就需要把k均分到两个数组,可以用到结论如果a\[k/2-1\]小雨b\[k/2-1\],那