寻找两个正序数组的中位数——冒泡排序(归并排序)

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

冒泡算法

class Solution {
    
    
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    
    
        int len = nums1.length + nums2.length;
        int[] nums3 = new int[len];
        for (int i = 0; i < nums1.length; i++)
            nums3[i] = nums1[i];
        for (int i = nums1.length; i < nums1.length + nums2.length; i++) {
    
    
            nums3[i] = nums2[i - nums1.length];
        }
        for (int i = 0; i < nums3.length - 1; i++) {
    
    
            for (int j = 0; j < nums3.length - i - 1; j++) {
    
    
                if (nums3[j] > nums3[j + 1]) {
    
    
                    int temp = nums3[j];
                    nums3[j] = nums3[j + 1];
                    nums3[j + 1] = temp;
                }
            }
        }
        if(len%2==0){
    
    
        int sum=len/2;
        double sum1=nums3[sum];
        double sum2=nums3[sum-1];
       double sum3=(sum1+sum2)/2;
        return sum3;
        }
        else{
    
    
            int sum=len/2;
        double sum1=nums3[sum];
        return sum1;
        }
    }
}

归并排序

 public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    
    
        int len = nums1.length + nums2.length;
        int[] nums3;
        if (nums1.length == 0) {
    
    
            nums3 = nums2;
        } else if (nums2.length == 0) {
    
    
            nums3 = nums1;
        } else {
    
    
            nums3 = new int[len];
            for (int i = 0, j = 0, k = 0; k < len; k++) {
    
    
                if (i < nums1.length && j < nums2.length) {
    
    
                    if (nums1[i] <= nums2[j]) {
    
    
                        nums3[k] = nums1[i];
                        i++;
                    } else {
    
    
                        nums3[k] = nums2[j];
                        j++;
                    }
                } else if (i < nums1.length) {
    
    
                    nums3[k] = nums1[i];
                    i++;
                } else if (j < nums2.length) {
    
    
                    nums3[k] = nums2[j];
                    j++;
                }
            }
        }
        if(len%2==0){
    
    
            int sum=len/2;
            double sum1=nums3[sum];
            double sum2=nums3[sum-1];
            double sum3=(sum1+sum2)/2;
            return sum3;
        }
        else{
    
    
            int sum=len/2;
            double sum1=nums3[sum];
            return sum1;
        }
    }

思路:
定义一个数组,存放nums1和nums2的元素,然后使用冒泡排序对nums3的元素进行排序,最后取中间值即可。

猜你喜欢

转载自blog.csdn.net/weixin_54107527/article/details/121414695
今日推荐