package array; /** * @ProjectName: leetcode * @Package: array * @ClassName: Array4 * @Author: markey * @Description:4. 寻æ¾ä¸¤ä¸ªæåºæ°ç»çä¸ä½æ° * ç»å®ä¸¤ä¸ªå¤§å°ä¸º m å n çæåºæ°ç»Â nums1 å nums2ã * * è¯·ä½ æ¾åºè¿ä¸¤ä¸ªæåºæ°ç»çä¸ä½æ°ï¼å¹¶ä¸è¦æ±ç®æ³çæ¶é´å¤æåº¦ä¸ºÂ O(log(m + n))ã * * ä½ å¯ä»¥å设 nums1 å nums2 ä¸ä¼åæ¶ä¸ºç©ºã * * ç¤ºä¾ 1: * * nums1 = [1, 3] * nums2 = [2] * * åä¸ä½æ°æ¯ 2.0 * ç¤ºä¾ 2: * * nums1 = [1, 2] * nums2 = [3, 4] * * åä¸ä½æ°æ¯ (2 + 3)/2 = 2.5 * * æ¥æºï¼åæ£ï¼LeetCodeï¼ * 龿¥ï¼https://leetcode-cn.com/problems/median-of-two-sorted-arrays * è使å½é¢æ£ç½ç»ææãåä¸è½¬è½½è¯·èç³»å®æ¹ææï¼éåä¸è½¬è½½è¯·æ³¨æåºå¤ã * @Date: 2020/4/20 22:39 * @Version: 1.0 */ public class Array4 { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int midNum = (nums1.length + nums2.length) / 2; int num = 0; int nums1Index = 0, num2Index = 0; for (int i = 0; i < midNum; i++) { if (nums1Index >= nums1.length) { num = nums2[num2Index]; num2Index++; continue; } if (num2Index >= nums2.length) { num = nums1[nums1Index]; nums1Index++; continue; } if (nums1[nums1Index] < nums2[num2Index]) { num = nums1[nums1Index]; nums1Index++; } else { num = nums2[num2Index]; num2Index++; } } double res; if ((nums1.length + nums2.length) % 2 == 0) { if (nums1Index >= nums1.length) { res = (num + nums2[num2Index]) / 2; } else if (num2Index >= nums2.length) { res = (num + nums1[nums1Index]) / 2; } else { res = (num + Math.min(nums1[nums1Index], nums2[num2Index])) / 2.0; } } else { if (nums1Index >= nums1.length) { res = nums2[num2Index]; } else if (num2Index >= nums2.length) { res = nums1[nums1Index]; } else { res = Math.min(nums1[nums1Index], nums2[num2Index]); } } return res; } }