算法五:寻找两个正序数组的中位数

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

题目内容

给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays

算法思想

求两个正序数组的中位数,与合并两个有序单链表算法类似

while 两数组一起循环i,j
    if nums1[i]<nums2[j]
        num[p]=nums1[i]
        i++
        p++
    else
        num[p]=nums2[j]
        j++
        p++
判断哪个数组不为空i,j!=length
while i<nums1.length
    num[p]=nums1[i]
    p++
    i++

整体算法

public class Day_05 {
    
    
    static Scanner input=new Scanner(System.in);
    public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
    
    
        int length=nums1.length+nums2.length;
        int [] num=new int[length];
        int p=0;
        int j=0;
        int i=0;
        while ( i < nums1.length&&j<nums2.length ) {
    
    
            if(nums1[i]<nums2[j]){
    
    
                num[p]=nums1[i];
                i++;
                p++;
            }else{
    
    
                num[p]=nums2[j];
                j++;
                p++;
            }
        }
        if(i!=nums1.length){
    
    
            while (i<nums1.length){
    
    
                num[p]=nums1[i];
                p++;
                i++;
            }
        }
        if(j!=nums2.length){
    
    
            while (j<nums2.length){
    
    
                num[p]=nums2[j];
                p++;
                j++;
            }
        }
        DecimalFormat df=new DecimalFormat("0.00000");
        if ((num.length%2)!=0){
    
    
            double aDouble_num=Double.valueOf(num[num.length/2]);
            return aDouble_num;
        }else{
    
    
            double sumnum=(Double.valueOf(num[num.length/2])+Double.valueOf(num[num.length/2-1]))/2;
            return sumnum;
        }
    }

    public static void main(String[] args) {
    
    
        int j=0;
        String day_05_num=new String();
        day_05_num=input.nextLine();
        String day_05_num1=new String();
        day_05_num1=input.nextLine();

        //去掉[,]两符号
        String day_05_search=new String();
        for (int i = 1; i < day_05_num.length()-1; i++) {
    
    
            day_05_search+=day_05_num.charAt(i);
        }

        String day_05_search1=new String();
        for (int i = 1; i < day_05_num1.length()-1; i++) {
    
    
            day_05_search1+=day_05_num1.charAt(i);
        }
        //根据逗号拆分字符串
        String [] day_05_Truenum=day_05_search.split(",");
        int [] day_05_int=new int[day_05_Truenum.length ];

        String [] day_05_Truenum1=day_05_search1.split(",");
        int [] day_05_int1=new int[day_05_Truenum1.length];
        //将字符串数组转换为数字数组
        for (int i = 0; i <day_05_Truenum.length ; i++,j++) {
    
    
            day_05_int[j]=Integer.valueOf(day_05_Truenum[i]);
        }
        j=0;
        for (int i = 0; i <day_05_Truenum1.length ; i++,j++) {
    
    
            day_05_int1[j]=Integer.valueOf(day_05_Truenum1[i]);
        }
        System.out.println(findMedianSortedArrays(day_05_int,day_05_int1));
    }
}

尾语

以上属于个人见解,有好的想法可以在下方评论写出自己的想法,大家一起进步。该题是力扣上的题,若有侵权,请及时告知。该题链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays

猜你喜欢

转载自blog.csdn.net/weixin_40741512/article/details/112593519