LeetCode 4. Median of Two Sorted Arrays

﹏ヽ暗。殇╰゛Y 2022-05-27 10:15 322阅读 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)).

Example 1:

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

Example 2:

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

C/C++

  1. double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
  2. double sum = 0.0;
  3. int total = nums1Size + nums2Size;
  4. int pos2 = total / 2;
  5. int pos1 = pos2 - (total%2==0);
  6. int i = 0,s1 = 0,s2 = 0;
  7. while(s1<nums1Size&&s2<nums2Size&&i<=pos2)
  8. {
  9. int tmp = nums1[s1]<nums2[s2]?nums1[s1++]:nums2[s2++];
  10. if(i>=pos1)sum+=tmp;
  11. ++i;
  12. }
  13. while(s1<nums1Size&&i<=pos2)
  14. {
  15. if(i>=pos1)sum+=nums1[s1];
  16. ++s1;
  17. ++i;
  18. }
  19. while(s2<nums2Size&&i<=pos2)
  20. {
  21. if(i>=pos1)sum+=nums2[s2];
  22. ++s2;
  23. ++i;
  24. }
  25. return pos1==pos2?sum:sum*5/10;
  26. }

Java

  1. class Solution {
  2. public double findMedianSortedArrays(int[] nums1, int[] nums2) {
  3. double sum = 0.0;
  4. int nums1Size = nums1.length;
  5. int nums2Size = nums2.length;
  6. int total = nums1Size + nums2Size;
  7. int pos2 = total / 2;
  8. int pos1 = pos2 - (total%2==0?1:0);
  9. int i = 0,s1 = 0,s2 = 0;
  10. while(s1<nums1Size&&s2<nums2Size&&i<=pos2)
  11. {
  12. int tmp = nums1[s1]<nums2[s2]?nums1[s1++]:nums2[s2++];
  13. if(i>=pos1)sum+=tmp;
  14. ++i;
  15. }
  16. while(s1<nums1Size&&i<=pos2)
  17. {
  18. if(i>=pos1)sum+=nums1[s1];
  19. ++s1;
  20. ++i;
  21. }
  22. while(s2<nums2Size&&i<=pos2)
  23. {
  24. if(i>=pos1)sum+=nums2[s2];
  25. ++s2;
  26. ++i;
  27. }
  28. return pos1==pos2?sum:sum*5/10;
  29. }
  30. }

Python

  1. class Solution:
  2. def findMedianSortedArrays(self, nums1, nums2):
  3. """
  4. :type nums1: List[int]
  5. :type nums2: List[int]
  6. :rtype: float
  7. """
  8. s = 0.0
  9. nums1Size = len(nums1)
  10. nums2Size = len(nums2)
  11. total = nums1Size + nums2Size
  12. pos2 = total // 2
  13. pos1 = pos2-1 if total%2==0 else pos2
  14. i,s1,s2 = 0,0,0
  15. while s1<nums1Size and s2<nums2Size and i<=pos2:
  16. tmp = nums1[s1]
  17. if nums1[s1]>nums2[s2]:
  18. tmp = nums2[s2]
  19. s2 += 1
  20. else: s1 += 1
  21. if i>=pos1:s += tmp
  22. i += 1
  23. while s1<nums1Size and i<=pos2:
  24. if i>=pos1:s += nums1[s1]
  25. s1 += 1
  26. i += 1
  27. while s2<nums2Size and i<=pos2:
  28. if i>=pos1:s += nums2[s2]
  29. s2 += 1
  30. i += 1
  31. return s if pos1==pos2 else s*5/10

发表评论

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

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

相关阅读

    相关 LeetCodeMedian of Two Sorted Arrays

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