第一遍代码
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m=nums1.length;
int n=nums2.length;
int[] array=new int(10*10*10*10*10*10);
for(int i=0;i<m;i++)
{
array[nums1[i]]++;
}
for(int i=0;i<n;i++)
{
array[nums2[i]]++;
}
if((m+n)%2==0)
{
}
else
{
}
}
}
本来想用上一题的二哥的数组
但是后面发现数组太大了导致不可行
然后后面想着用hashmap后面发现一样不可行,hashmap解决了数量内存问题,但是不能按照数组顺序
这个题目不是这个思路
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
// 创建一个新数组,长度为两个数组长度之和
int[] temp = new int[nums1.length + nums2.length];
// 复制第一个数组到新数组
System.arraycopy(nums1, 0, temp, 0, nums1.length);
// 复制第二个数组到新数组
for (int i = 0; i < nums2.length; i++) {
temp[i + nums1.length] = nums2[i];
}
// 对合并后的数组进行排序
Arrays.sort(temp);
// 计算中位数
int midIndex = temp.length / 2;
// 如果数组长度是奇数
if ((temp.length & 1) == 1) {
// 直接返回中间的元素
return (double) temp[midIndex];
} else {
// 如果数组长度是偶数,返回中间两个元素的平均值
return (temp[midIndex] + temp[midIndex - 1]) / 2.0;
}
}
}
这是二哥最简单的代码
这个代码用了sort直接先是把两个数组合并到一个数组里面
System.arraycopy(nums1,0,temp,0,nums1.length)
然后其实这道题目没有想出来
所以基本都是参考二哥的思路
这里他还用了一个归并排序
利用了两个的正序性质,去减少时间复杂度,然后用if条件筛选出来
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int n = nums1.length;
int m = nums2.length;
// 判断总元素数量是奇数还是偶数
boolean flag = ((m + n) % 2) == 0;
int point1 = 0, point2 = 0; // 分别为 nums1 和 nums2 的指针
int remNum1 = 0, remNum2 = 0; // 用于存储当前遍历的元素和前一个元素
// 遍历两个数组的元素,直到到达中位数的位置
for (int i = 0; i <= (n + m) / 2; i++) {
remNum2 = remNum1; // 存储前一个元素
// 比较两个数组当前元素,取较小的那个
if (point1 < n && (point2 >= m || nums1[point1] <= nums2[point2])) {
remNum1 = nums1[point1++];
} else {
remNum1 = nums2[point2++];
}
}
// 如果总元素数量是偶数,则中位数是中间两个数的平均值
if (flag) {
return (remNum1 + remNum2) / 2.0;
}
// 如果总元素数量是奇数,则中位数是中间的那个数
return remNum1 * 1.0;
}
}