前言:
此时同学们对“求数组的中位数”大致比较注意,咱们都想要学习一些“求数组的中位数”的相关内容。那么小编也在网络上汇集了一些对于“求数组的中位数””的相关内容,希望同学们能喜欢,同学们一起来了解一下吧!思路:二分查找,分为合并数组与不合并数组两种方式,合并数组较为简单,但是其空间复杂度较高,为O(m+n),这里不介绍,此时介绍不合并数组的方案。
class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int len1 = nums1.length, len2 = nums2.length; int len = len1 + len2; if(len % 2 == 1){ int m = len / 2; double res = getK(nums1, nums2, m + 1); return res; }else{ int m1 = len / 2 - 1, m2 = len / 2; double res = (getK(nums1, nums2, m1 + 1) + getK(nums1, nums2, m2 + 1)) / 2.0; return res; } } public double getK(int[] nums1, int[] nums2, int k){ int len1 = nums1.length, len2 = nums2.length; int index1 = 0, index2 = 0; int KthElement = 0; while(true){ //边界 if(index1 == len1){ return nums2[index2 + k - 1]; } if(index2 == len2){ return nums1[index1 + k - 1]; } if(k == 1){ return Math.min(nums1[index1], nums2[index2]); } //正常 int m = k / 2; int newIndex1 = Math.min(index1 + m, len1) - 1; int newIndex2 = Math.min(index2 + m, len2) - 1; int pivot1 = nums1[newIndex1], pivot2 = nums2[newIndex2]; if(pivot1 <= pivot2){ //排除小的一部分,保留剩下的,指针移动 k -= (newIndex1 - index1 + 1); index1 = newIndex1 + 1; }else{ k -= (newIndex2 - index2 + 1); index2 = newIndex2 + 1; } } }}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。