leetcode4

xiaoxiao2021-02-28  50

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 使用二分搜索

package leetcode; public class leetcode4 { class Solution {    public double findMedianSortedArrays(int[] nums1, int[] nums2) {     int m=nums1.length;//nums1的长度     int n=nums2.length;//nums2的长度     if(m>n)//保证n<m   当i=0~m时,j=(m+n+1)/2-i,可能为负数     {     int[] temp=nums1;nums1=nums2;nums2=temp;     int tmp=m;m=n;n=tmp;     }     int imin=0,imax=m,halflen=(m+n+1)/2;     while(imin<=imax)     {     int i=(imin+imax)/2;//i,j初始化     int j=halflen-i;//nums2[j-1]<=nums1[i]&&nums2[j]>=nums1[i-1]时满足条件其他都要分类讨论。             if(i<imax&&nums2[j-1]>nums1[i])    //第一种情况     {     imin=imin+1;     }     else if(nums2[j]<nums1[i-1]&&i>imin)//第二种情况     {     imax=imax-1;     }     else //第三种情况     {        int maxleft=0;     int minright=0;     if(i==0) { //考虑四种边界情况     maxleft=nums2[j-1];     }     else if(j==0) {     maxleft=nums1[i-1];     }     else {     maxleft=Math.max(nums1[i-1], nums2[j-1]);     }     if((m+n)%2==1)return maxleft;     if(i==m) {minright=nums2[j];}     else if(n==j) {     minright=nums1[i];     }     else {     minright=Math.min(nums1[i], nums2[j]);     }     return (maxleft+minright)/2;     }     }            return 0.0;    } } }

转载请注明原文地址: https://www.6miu.com/read-2632193.html

最新回复(0)