zoukankan      html  css  js  c++  java
  • 中位数计算

    题目

    数组中位数

    直观思路

    想的是如何将两个数组组合起来,也就是将两个有序的数组组合成为一个数组,然后直接计算中位数,将两个数组组合成为一个数组的逻辑上的时间复杂度是(O(N+M)),在此基础上我阐释实现了一个算法,但是时间超时了,AC不了,所以需要更加有效的算法,另外需要注意,在程序测试的时候,不能存在数组越界的情况,尤其是条件判断的时候很容易在极端情况之下忽略该条件,使得我们程序变得很难发现错误,所以我们需要做的是,细致再细致。而且本地PC在数组越界处在循环语句的时候,会自动跳过最后的越界情况,导致不能及时发现可能出现的错误,这一点在写题的时候出现了部分错误,需要注意。

    综上来看,上面的思路不可取。

    本地AC代码

    #include<vector>
    #include<iostream>
    using namespace std;
    
    class Solution {
    public:
        double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
            int len1 = nums1.size();
            int len2 = nums2.size();
            vector<int> num;
            int i = 0,j = 0;
            while(1){
                if(nums1[i]<nums2[j]){
                    num.push_back(nums1[i]);
                    i++;
                }
                if(i == len1){
                    while(j< len2){
                        num.push_back(nums2[j]);
                        j++;
                    }
                }
                if(i+j == len1+len2) break;
                if(nums1[i]>nums2[j]){
                    num.push_back(nums2[j]);
                    j++;
                }
                if(j == len2){
                    while(i< len1){
                        num.push_back(nums1[i]);
                        i++;
                    }
                }
                if(i+j == len1+len2) break;
            }
            int f_len = num.size();
            int len_f = f_len/2;
            float res = 0;
            if(f_len%2){
                res = (double)num[len_f];
            }
            else{
                res = (double)(num[f_len/2]+num[len_f-1])/2;
            }
            return res;
        }
    };
    
    int main(){
        double res;
        vector<int> nums1,nums2;
        Solution solution;
        for(int i = 0; i < 10; i++){
            nums1.push_back(i);
        }
        for(int i = 10; i< 15; i++){
            nums2.push_back(i);
        }
        res = solution.findMedianSortedArrays(nums1,nums2);
        printf("%lf",res);
        return 0;
    }
    

    正确思路和题解

    采用二分搜索的方法实现的搜索,有点难。。。。
    二分思想

    抬起头,永远年轻,永远热泪盈眶!
  • 相关阅读:
    二进制回复操作
    日志和备份介绍
    mraiadb查
    mraiadb增三删改
    mardb基本操作
    redis搭建主从和多主
    ldd 查看符号找不到
    一个声明指定了多个类型
    word中为选定文本加边框和底纹
    ue配置lua语法高亮
  • 原文地址:https://www.cnblogs.com/marvin-Hua-manlou/p/14639394.html
Copyright © 2011-2022 走看看