标签:假设 amp 中位数 商业 class return sorted max ted
题目:
int m=nums1.length,n=nums2.length; if(m>n)//保证len1<=len2 return getZ(nums2,nums1); int start=0,end=m; int maxl = 0,minr = 0; while(start<=end) { int i=(start+end)/2; int j=(m+n+1)/2-i; if(i>start&&nums1[i-1]>nums2[j]) {//i太大应该变小,右边范围左移 end--; }else if(i<end&&nums2[j-1]>nums1[i]){//i太小应该变大,左边范围扩大 start++; }else { maxl=(i==0)?nums2[j-1]:((j==0)?nums1[i-1]:(nums1[i-1]>nums2[j-1]?nums1[i-1]:nums2[j-1])); if((m+n)%2!=0) return maxl; else minr=(i==m)?nums2[j]:((j==n)?nums1[i]:(nums1[i]<nums2[j]?nums1[i]:nums2[j])); return (maxl+minr)/2.0; } } return 0.0;
过程中遇到的问题及理解:
1,红色第一处以及红色第二处如果规定为(i>=1)(i<=m)执行时间会变长,或者是说start和end为什么可以代表i的范围
2,此处的返回不能写在外面因为当m=0时,j可能会越界(如{}{1}这两个数组执行时),因此奇数时直接返回,而只有奇数时才会越界
3,end--和start++的确定不太明白,还是想不通start和end为什么可以代表i的范围
标签:假设 amp 中位数 商业 class return sorted max ted
原文地址:https://www.cnblogs.com/code-fun/p/11438417.html