4.寻找两个有序数组的中位数/寻找两个有序数组的第K个数

思路:将两个数组merge成一个数组help,建立三个工作索引,两个工作索引分别指向nums1,nums2,值小的填入help中。直到遍历完两个数组。最后对长度的奇偶性作出判断求出中位数即可。

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
          //这里用一部分归并排序思想
          int m=nums1.length;
          int n=nums2.length;
          int help[]=new int[m+n];
          int i=0,j=0,k=0;//工作索引,用来遍历数组
          while(i<m&&j<n){//遍历 将两个数组的数字填入
            help[k++]=nums1[i]<nums2[j]?nums1[i++]:nums2[j++];
          }
          //两个数组必有一个先填完越界
          while(i<m){//nums2填完
            help[k++]=nums1[i++];
          }
          while(j<n){//nums1填完
            help[k++]=nums2[j++];
          }
          //此时help数组就是将原数组排好序的数组,此时我们遍历help数组,找出中位数即可。
          double result;
          if(((m+n)&1)==1) result=help[(m+n)>>1];//长度为奇数则直接为中间索引
          else result=(help[(m+n)/2-1]+help[(m+n)>>1])*1.0/2;//长度为偶数,则中间索引-1和中间索引的中值
          return result;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容