【leetcode】双指针专题

本文持续更新leetcode上适用于双指针相关题目解法:

题目:4. 寻找两个有序数组的中位数

链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/

解析:通过2个下标来依次比较2个数组的元素,直到走过的数量达到一半,复杂度(m+n)/2

答案:



double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
    //printf("num1size:%d, num2size:%d\n", nums1Size, nums2Size);

    int last; // 上一个记录的位置
    int now; // 当前最新的位置
    int index1 = 0;
    int index2 = 0;
    int count = 0;
    int sum = nums1Size + nums2Size;

    // 针对2个数组都非空
    while (count < (sum / 2 + 1) && nums1Size != 0 && nums2Size != 0) {
        if (nums1[index1] < nums2[index2]) {
            //printf("index1 %d, %d\n", index1, nums1[index1]);
            last = now;
            now = nums1[index1];
            index1++;
            if (index1 == nums1Size) {
                //printf("while1 break 1\n");
                count++;
                break;
            } 
        } else {
            //printf("index2 %d, %d\n", index2, nums2[index2]);
            last = now;
            now = nums2[index2];
            index2++;
            if (index2 == nums2Size) {
                //printf("while1 break 2\n");
                count++;
                break;
            }      
        }
        count++;
    }

    // 针对存在空数组情况
    while (count < (sum / 2 + 1)) {
        if (index1 == nums1Size) {
            //printf("++index2 %d\n", nums2[index2]);
            last = now;
            now = nums2[index2];
            index2++;
        } else {
            //printf("++index1 %d\n", nums1[index1]);
            last = now;
            now = nums1[index1];
            index1++;
        }
        count++;
        //printf("while2: %d\n", count);
    }

    double res;
    if (sum % 2 == 0) {
        res = (now + last) * 0.5;
    } else {
        res = now;
    }
    return res;
}

结果:

执行结果:通过
执行用时 :12 ms, 在所有 C 提交中击败了97.14%的用户
内存消耗 :5.9 MB, 在所有 C 提交中击败了100.00%的用户

 

你可能感兴趣的:(leetcode)