前言
这一道题目其实很简单,不过Leetcode难度定义为了困难。
题目链接:寻找两个正序数组的中位数
思路
定义两个下标i,j同时遍历两个数组,同时定义一个l来表示当前字符在合并后的数组中位于哪个位置, 如果nums[i]>nums[j],则 j++,l++;否则i++,l++.知道l值为中位数。 当然,要考虑某个数组可能已经遍历完了,中位数还没找到,因此还得把该数组再遍历下。
代码
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int length = nums1.length + nums2.length;
int i =0,j=0,l=0;
float curLef = -10^6 -1,curRight = -10^6-1;
int indexLeft = (length-1)/2;
int indexRight = length/2;
while(i<nums1.length && j < nums2.length ){
if( nums1[i] >= nums2[j] ){
if (indexLeft == l) curLef = nums2[j];
if (indexRight == l) {curRight = nums2[j];return (curLef + curRight)/2; }
j++;
l++;
}else{
if (indexLeft == l) curLef = nums1[i];
if (indexRight == l) {curRight = nums1[i];return (curLef + curRight)/2; }
i++;
l++;
}
}
while (i < nums1.length ){
if (indexLeft == l) curLef = nums1[i];
if (indexRight == l) {curRight = nums1[i];return (curLef + curRight)/2; }
i++;
l++;
}
while (j < nums2.length ){
if (indexLeft == l) curLef = nums2[j];
if (indexRight == l) {curRight = nums2[j];return (curLef + curRight)/2; }
j++;
l++;
}
return (curLef + curRight)/2;
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END