【看懂LeetCode】4. 寻找两个正序数组的中位数

一、绪

依旧是简单的思路,依旧是c语言写题解代码

本篇文章,主要是以c语言编程解决LeetCode题库第四题,如何寻找两个正序数组的中位数?

二、无重复字符的最长子串

链接: 寻找两个正序数组的中位数.

(一)题目描述

解释

示例一:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

示例二:

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

解题思路

//将nums1Size + nums2Size得到总长numSize

//定义数组num[numSize],通过循环赋值和判断大小按正序(从小到大)将两个数组拼接成一个数组
    //先判断两个数组谁的值先赋完。存在四种情况 1.都未赋值完 2.nums2已赋值完 3.nums1已赋完 4.都已赋值完,循环结束
        //在都未赋完的情况下,需要对两个数组的值进行判断,谁小谁先赋值

//开始判断,获取中值
    //如果numSize%2 == 0为真,则输出两个数组拼起来的第numSize/2个和第(numSize/2)+1个位置的数之和的1/2
    //如果numSize%2 == 0为假,则输出两个数组拼起来的第(numSize/2)+1个位置的数

//注意:上述的第几个位置 转化为数组下标 都要再减一

(二)AC代码

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
    int numSize = nums1Size + nums2Size; //将nums1Size + nums2Size得到总长numSize
    int *s1 = nums1,*s2 = nums2; //用于遍历数组
    int s1Index = 0,s2Index = 0; //用于判断指针遍历到的当前数组下标
    double midNum; //用于记录结果值,即总数组的中间值

    //定义数组num[numSize],通过循环赋值和判断大小按正序(从小到大)将两个数组拼接成一个数组
        //先判断两个数组谁的值先赋完。存在四种情况 1.都未赋值完 2.nums2已赋值完 3.nums1已赋完 4.都已赋值完,循环结束
            //在都未赋完的情况下,需要对两个数组的值进行判断,谁小谁先赋值
    int num[numSize];
    for(int i = 0;i<numSize;i++){
        if(s1Index < nums1Size&&s2Index < nums2Size){
            if(*(s1 + s1Index)<*(s2 + s2Index)){
                num[i] = *(s1 + s1Index);
                s1Index++; //当前位已赋值到新数组,下标值++,到下一位
            }else{
                num[i] = *(s2 + s2Index);
                s2Index++;
            }
        }else if(s1Index < nums1Size){
            num[i] = *(s1 + s1Index);
            s1Index++;
        }else if(s2Index < nums2Size){
            num[i] = *(s2 + s2Index);
            s2Index++;
        }
    }

    //开始判断,取中值
        //如果numSize%2 == 0为真,则输出两个数组拼起来的第numSize/2个和第(numSize/2)+1个位置的数之和的1/2
        //如果numSize%2 == 0为假,则输出两个数组拼起来的第(numSize/2)+1个位置的数
    if(numSize%2 == 0){
        midNum = (num[(numSize/2)-1]+num[((numSize/2)+1)-1])/2.0;
    }else{
        midNum = num[((numSize/2)+1)-1];
    }
    return midNum;
}

三、后记

(一)一些遇到的问题

  1. 指针遍历数组时,只有数组内有空位置,才可以用 if(p!=’\0’) 来判断指针是否到了数组最后一位。若是数组内无空位置,需要先用 sizeof() 获取数组长度,遍历的时候记录下标值,这时可以用 if(下标值<数组长度) 来判断指针是否到了数组最后一位。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peng_YuJun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值