[LEETCODE]寻找两个正序数组的中位数

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

算法的时间复杂度应该为 O(log (m+n)) 。

示例 1:

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

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

提示:

nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/median-of-two-sorted-arrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出
处。文章来源地址https://uudwc.com/A/XNWMo


  • 实现C++

#include <math.h>

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int all_nums =  nums1.size() + nums2.size();  // 4
        bool isSingle = all_nums % 2 == 0 ? false:true;  //2<---- False
        double result_value = 0.0;
        
        // 排序
        int max_value_index = all_nums / 2;
        std::cout << "max_value:" << max_value_index << std::endl;
        vector<int> sort_vec;

        int index_num1 = 0;
        int index_num2 = 0;
        std::cout << sort_vec.size() << std::endl;
        std::cout << nums1.size()<< std::endl;
        std::cout << nums2.size()<< std::endl;
        while( sort_vec.size()!= (max_value_index + 1))
        {
            if(index_num1 == nums1.size() && index_num2 == nums2.size())
            {
                break;
            }
            else if(index_num1 == nums1.size())
            {
                std::cout << "取对应的元素A" << std::endl;
                sort_vec.push_back(nums2[index_num2]);
                index_num2 ++;
            }
            else if(index_num2 == nums2.size())
            {
                  std::cout << "取对应的元素B" << std::endl;
                sort_vec.push_back(nums1[index_num1]);
                index_num1 ++;
            }
            else {
            if(nums1[index_num1] < nums2[index_num2])
            {
                std::cout << "取对应的元素C" << std::endl;
                std::cout << "参数::" << nums1[index_num1] << endl;
                sort_vec.push_back(nums1[index_num1]);
                index_num1 ++;
            }
            else {
                std::cout << "取对应的元素D" << std::endl;
                sort_vec.push_back(nums2[index_num2]);
                index_num2 ++;
            }
            }
        }
        // 取对应的元素
        if(isSingle)
        {
            int index = int(all_nums / 2);
            std::cout << "取对应的元素1" << std::endl;
            std::cout << index;
            std::cout << sort_vec[index];
            return sort_vec[index];
        }
        else {
            int max_index = all_nums / 2;
            int min_index = max_index - 1;
            std::cout << "取对应的元素2" << std::endl;
             std::cout << max_index;
            std::cout << "sortMax:" << sort_vec[max_index] << std::endl;
             std::cout << "sortMin:" << sort_vec[min_index] << std::endl;
            double rs_value = double(sort_vec[max_index] + sort_vec[min_index]) / 2.0;
            return rs_value;
        }
        return result_value;
    }
};

原文地址:https://blog.csdn.net/Giser_D/article/details/131412725

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月28日 06:15
ESP32-WROOM-32 UDP单播透传AT指令例程
下一篇 2023年06月28日 06:15