4.寻找两个正序数组的中位数 (困难)

简介: 4.寻找两个正序数组的中位数 (困难)

1.移动指针

时间复杂度为O(m+n); //官方给出的二分查找方法的时间复杂度为O(log(m+n))

 public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int m = nums1.length;
        int n = nums2.length;
        int len = m+n;
        int left = -1, right = -1;
        int index_nums1 = 0, index_nums2 = 0;
        //len为奇数或偶数都需要遍历 len/2+1次
        for (int i = 0; i < (len/2 + 1); i++) {
            left = right; //left记录上次right的结果
            if (index_nums1 < m && (index_nums2>=n || nums1[index_nums1] < nums2[index_nums2])) {
                right  = nums1[index_nums1++];
            }else {
                right = nums2[index_nums2++];
            }
        }
        if (len %2 ==0)
            return (left+right) /2.0;
        else
            return  right;
 
    }
相关文章
|
1月前
|
算法
正序数组中位数
给定两个有序数组nums1和nums2,要求找到它们合并后的中位数,时间复杂度需达到O(log(m+n))。通过双指针法遍历两个数组,使用left和right变量记录遍历过程中的值,最终根据合并后数组长度的奇偶性返回中位数。此方法有效避免了直接合并数组带来的高时间复杂度问题。
21 0
|
4月前
|
算法 Python
【面试题】寻找两个正序数组的中位数
【面试题】寻找两个正序数组的中位数
34 0
|
7月前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
50 2
|
7月前
|
算法 C++
寻找两个正序数组的中位数(C++)
寻找两个正序数组的中位数(C++)
41 0
|
7月前
|
算法 安全 C#
Leetcode算法系列| 4. 寻找两个正序数组的中位数
Leetcode算法系列| 4. 寻找两个正序数组的中位数
|
算法 测试技术 C++
C++算法:寻找两个正序数组的中位数
C++算法:寻找两个正序数组的中位数
寻找两个正序数组中的中位数
寻找两个正序数组中的中位数
|
C语言 C++
C/C++每日一练(20230514) 全排列、分数转小数、排序链表去重II
C/C++每日一练(20230514) 全排列、分数转小数、排序链表去重II
99 0
|
Rust 自然语言处理 算法
【算法】4. 寻找两个正序数组的中位数(多语言实现)
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (m+n)) 。
【算法】4. 寻找两个正序数组的中位数(多语言实现)