public class medianOfTwoSortedArrays_4 {
/**
*
* 因爲兩個數組是有序的,分別爲每個數組設定一個指針,按照數的大小,交替向前走,思路同將兩個有序數組合併爲一個有序數組
* 記錄兩個指針的總步數和,不能超過兩數組長度和的一半
* 循環終止時,若爲奇數,則最新的數的指針指在中位數的前一位上;若爲偶數,則最新的數的指針指在兩位中位數的第一位上;二者均需找到下一個位置的數。具體代碼見60-80行
* 15-26行對特殊情況進行處理
* 時間複雜度O(*)空間複雜度O(1)
*
* @param nums1
* @param nums2
* @return
*/
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int length1 = nums1.length;
int length2 = nums2.length;
int lengthSum = length1 + length2;
boolean flag = false;
if(lengthSum % 2 == 0){
flag = true;
}
if(lengthSum == 0){
return 0;
}
if(length1 == 0 && length2 < 2){
return nums2[0];
}
if(length2 == 0 && length1 < 2){
return nums1[0];
}
int nums1Index = 0;
int nums2Index = 0;
int indexMid = lengthSum / 2;
double result = 0;
boolean whileNums1 = false;
boolean whileNums2 = false;
while(nums1Index < length1 && nums2Index < length2 && nums1Index + nums2Index < indexMid){
if(nums1[nums1Index] <= nums2[nums2Index]){
++nums1Index;
whileNums1 = true;
whileNums2 = false;
}else{
++nums2Index;
whileNums1 = false;
whileNums2 = true;
}
}
while (nums1Index < length1 && nums1Index + nums2Index < indexMid){
++nums1Index;
whileNums1 = true;
whileNums2 = false;
}
while (nums2Index < length2 && nums1Index + nums2Index < indexMid){
++nums2Index;
whileNums1 = false;
whileNums2 = true;
}
int indexMidValue = 0;
if( whileNums1 == true && whileNums2 == false){
indexMidValue = nums1[--nums1Index];
}else{
indexMidValue = nums2[--nums2Index];
}
int indexMidValue2 = 0;
if( whileNums1 == true && whileNums2 == false){
nums1Index++;
}else{
nums2Index++;
}
if(nums1Index < length1){
if(nums2Index < length2){
indexMidValue2 = nums1[nums1Index]<nums2[nums2Index]?nums1[nums1Index]:nums2[nums2Index];
}else {
indexMidValue2 = nums1[nums1Index];
}
}else {
indexMidValue2 = nums2[nums2Index];
}
if (flag){
// 偶數
result = (double)(indexMidValue + indexMidValue2) / 2;
}else {
// 奇數
result = (double)indexMidValue2;
}
return result;
}
public static void main(String[] args){
int[] nums1 ={};
int[] nums2 ={1};
System.out.println(findMedianSortedArrays(nums1,nums2));
}
}
leetcode median Of Two Sorted Arrays 求兩個有序數組的中位數 第四題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.