算法题 - leetCode - 寻找两个正序数组的中位数

·  阅读 896

前言

这一道题目其实很简单,不过Leetcode难度定义为了困难。 题目链接:寻找两个正序数组的中位数

思路

定义两个下标i,j同时遍历两个数组,同时定义一个l来表示当前字符在合并后的数组中位于哪个位置, 如果nums[i]>nums[j],则 j++,l++;否则i++,l++.知道l值为中位数。 当然,要考虑某个数组可能已经遍历完了,中位数还没找到,因此还得把该数组再遍历下。

代码

public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    int length = nums1.length + nums2.length;
    int i =0,j=0,l=0;
    float curLef = -10^6 -1,curRight = -10^6-1;

    int indexLeft = (length-1)/2;
    int indexRight = length/2;
    while(i<nums1.length && j < nums2.length ){
        if( nums1[i] >= nums2[j] ){
            if (indexLeft == l) curLef = nums2[j];
            if (indexRight == l) {curRight = nums2[j];return (curLef + curRight)/2; }
            j++;
            l++;
        }else{
            if (indexLeft == l) curLef = nums1[i];
            if (indexRight == l) {curRight = nums1[i];return (curLef + curRight)/2; }
            i++;
            l++;
        }
    }
    while (i < nums1.length ){
        if (indexLeft == l) curLef = nums1[i];
        if (indexRight == l) {curRight = nums1[i];return (curLef + curRight)/2; }
        i++;
        l++;
    }
    while (j < nums2.length ){
        if (indexLeft == l) curLef = nums2[j];
        if (indexRight == l) {curRight = nums2[j];return (curLef + curRight)/2; }
        j++;
        l++;
    }
    return (curLef + curRight)/2;
}
复制代码
分类:
代码人生
标签:
收藏成功!
已添加到「」, 点击更改