# 原地址
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/
# 思路
- 通过双指针实现
- 通过题干得知,两个正序数组,那么可以定义两个指针移动来实现
- 然后发现,两个数组长度为奇数,则移动n/2个长度,如果是偶数需要移动n/2+1长度,因为偶数我需要把第i个和第i+1都记录下来。
- 我定义了一个长度为2的数组,存放移动过的数据,如果已经记录过了会进行覆盖(这里的意思是,我只取排序好的数组中的最后两位)
- 移动的时候有两个原则
- 如果两个数组都不为空,哪个值小,移动哪个
- 如果有一个为空,就移动另外一个
- 是否会出现都为空的情况?我这里模拟了一些数字发现,永远不会,因为我们的循环条件是中位数,或者中位数+1次循环。
- 移动中,我定义了一个flag来标记,最后一次移动的数组是哪个数组。
- 移动结束后
- 如果两个数组长度为奇数,就直接返回最后一次移动数组的指针。
- 如果两个数组长度为偶数,那么移动的结果肯定被存放到我定义的数组中了,所以只需要返回(定义数组中的数字合/2)就是结果。
- 总结,我这个虽然空间复杂度很高,但是时间复杂度很低,通过O((m+n)/2)可以完成。
# 运行时间图

# 代码
```java
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int i = -1, j = -1;
int flag = 0;
int totalLen = nums1.length + nums2.length;
if (totalLen < 1) {
return 0;
}
if (totalLen == 1) {
return nums1.length > nums2.length ? nums1[0] : nums2[0];
}
int moveCount = (totalLen - 1) / 2;
if (totalLen % 2 == 0) moveCount++;
int[] nums = new int[2];
for (int k = 0; k <= moveCount; k++) {
if (i + 1 < nums1.length && j + 1 < nums2.length) {
if (nums1[i + 1] <= nums2[j + 1]) {
i++;
nums[k % 2] = nums1[i];
flag = 1;
} else {
j++;
nums[k % 2] = nums2[j];
flag = 2;
}
} else if (i + 1 < nums1.length) {
i++;
nums[k % 2] = nums1[i];
flag = 1;
} else {
j++;
nums[k % 2] = nums2[j];
flag = 2;
}
}
if (totalLen % 2 == 0) {
return (double) (nums[0] + nums[1]) / 2;
} else {
if (flag == 1) {
return nums1[i];
} else if (flag == 2) {
return nums2[j];
} else {
return 0;
}
}
}
}
```

4. 寻找两个正序数组的中位数