回归玩家,沉迷了好几天原神了,人事是一点不干天天就知道玩
题目来自力扣寻找两个正序数组的中位数
class Solution { public static double findMedianSortedArrays(int[] nums1, int[] nums2) { //定义两个布尔指针判断数组1和数组2是否到了尽头,指针p1p2用来遍历 int p1 = 0,p2 = 0; int n1 = nums1.length,n2 = nums2.length; //两个数组都未遍历到尽头 if(p1 < n1 && p2 < n2){ while(p1 + p2 < (n1 + n2)/2-1) { if (p1 == n1 || p2 == n2) { break; } if (nums1[p1] < nums2[p2]) p1++; else p2++; } } //nums1到尽头 nums2没有 if(p1 >= n1 && p2 < n2){ while(p1 + p2 < (n1 + n2)/2-1){ p2++; } } //nums1没到尽头 nums2到了 if(p1 < n1 && p2 >= n2){ while(p1 + p2 < (n1 + n2)/2-1){ p1++; } } //定义left取n/2-1索引处的位置,right取n/2 double left = 0,right = Double.MAX_VALUE; if(p1 < n1 && p2 < n2){ left = nums1[p1] < nums2[p2] ? nums1[p1++] : nums2[p2++]; if(p1 == n1 || p2 == n2){ right = p2 == n2 ? nums1[p1] : nums2[p2]; }else{ right = nums1[p1] < nums2[p2] ? nums1[p1] : nums2[p2]; } }else if(p1 >= n1 && p2 < n2){ left = nums2[p2]; if(p2 < n2-1) right = nums2[p2+1]; }else if(p1 < n1 && p2 >= n2){ left = nums1[p1]; if(p1 < n1-1) right = nums1[p1+1]; } double mid = 0; if((n1+n2) % 2 == 1){ //如果n数字太小导致取不到right if(right == Double.MAX_VALUE) mid =left; else mid = right; }else{ mid = (left+right)/2; } return mid; } }
时间复杂度是O(m+n)
如果用类似归并的想法去做的话应该能到O(log(m+n))这样
不管了等会再看吧!还差20抽保底!稻妻一堆任务没做!今天一定要把雷神肝出来!