秋招突击——算法打卡——5/25、5/26——寻找两个正序数组的中位数

news2024/9/20 1:04:34
题目描述

在这里插入图片描述

自我尝试
  • 首先,就是两个有序的数组进行遍历,遍历到一半即可。然后求出均值,下述是我的代码。但这明显是有问题的,具体错误的代码如下。计算复杂度太高了,O(n),所以会超时,具体代码如下
  • 这说明一个问题,不能逐个遍历,只要遍历就一定有问题的,可以尝试一下对折寻找。
   double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        double numsLeft = 0,numsRight = 0;
        int len = nums1.size() + nums2.size(),index = 0;
        for(int i = 0, j = 0; i <= nums1.size() && j <= nums2.size();){
            if(nums1[i] < nums2[j])
                numsLeft = nums1[i ++] ;
            else
                numsLeft = nums2[j ++ ];
            if(index == len / 2 -1)  numsLeft = numsLeft;
            if(index == len / 2) numsRight = numsLeft;
            index ++;
        }
        if(len % 2 == 2)
            return (numsLeft + numsRight )/ 2;
        else
            return numsRight;
    }
正常做法
  • 这里仅仅讲解二分法,只需要注意这里的k是在剩下的元素中,寻找第k小的数字即可
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
    int tot = nums1.size() + nums2.size();
    if(tot % 2 == 0){
        int left =  find(nums1,0,nums2,0,tot / 2);
        int right = find(nums1,0,nums2,0,tot / 2 + 1);
        return (left + right) / 2.0
    }else{
        return find(nums1,0,nums2,0,tot / 2 + 1);
    }
}

int find(vector<int> nums1,int i,vector<int> nums2,int j,int k){
    /*
     * k表示需要查找的第k个小数字,第一个数字,就表示两个数组在可审查的范围内,都要找第一个元素,所以仅仅比较最小值即可
     */
    // 确保第一个vector的长度是最短的
    if(nums1.size() - i > nums2.size() - j) return find(nums2,j,nums1,i,k);

    // 已经排除了第k-1个元素,剩下的就是第k个元素了,所以仅仅需要比较当前两个数组的最小的元素即可
    if (k == 1){
        if(nums1.size() == i)   return nums2[j];
        else return min(nums1[i],nums2[j]);
    }

    // 第一个数组已经完全检查过了,完全都被排除了,所以,相当于直接在第二个数组中找第k个值
    if (nums1.size() == i) return nums2[j + k - 1];

    // 更新移动数组的下标,进行第二次迭代,这里是将元素进行第二次缩减,然后在进行查找。
    // si和sj是更新之后的新的数组的下标
    int si = min((int)nums1.size(),i + k / 2) ,sj = j + k - k / 2;
    if(nums1[si - 1] > nums2[sj - 1])
        return find(nums1,i,nums2,sj,k - (sj - j));
    else
        return find(nums1,si,nums2,j,k-(si - i));
}
分析总结
  • 还是适合中午或者下午做算法题,不然太难受了,一个上午都是晕乎乎的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1697314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年【高压电工】新版试题及高压电工找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 高压电工新版试题是安全生产模拟考试一点通生成的&#xff0c;高压电工证模拟考试题库是根据高压电工最新版教材汇编出高压电工仿真模拟考试。2024年【高压电工】新版试题及高压电工找解析 1、【单选题】 110KV及以下…

C++课程设计:学校人员信息管理系统(可视化界面)

目录 学校人员信息管理系统 操作演示 MP4转GIF动图 设计功能要求 评分标准 QT Creator安装和新建项目 QT安装 QT新建项目 管理系统程序设计 mainwindow.h 文件 mainwindow.h 程序释义 mainwindow.cpp 文件 mainwindow.cpp 程序释义 main.h 文件 TXT文件生成 博主…

redis6.2.7 搭建一主多从

1、集群规划 节点端口角色192.168.137.1026379master192.168.137.1026380slave192.168.137.1036381slave 2、伪集群搭建 2.1 创建fake_cluster 目录存放 公共配置文件 # 进入redis目录 cd /app/apps/redis-6.2.7# 创建存放伪集群的目录 mkdir fake_cluster#复制redis.conf到…

东方通TongWeb结合Spring-Boot使用

一、概述 信创需要; 原状:原来的服务使用springboot框架,自带的web容器是tomcat,打成jar包启动; 需求:使用东方通tongweb来替换tomcat容器; 二、替换步骤 2.1 准备 获取到TongWeb7.0.E.6_P7嵌入版 这个文件,文件内容有相关对应的依赖包,可以根据需要来安装到本地…

【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt窗口 | 菜单栏 | QMenuBar的使用及说明 文章编号&#xff1a;Qt 学习…

顺序栈的实现

顺序栈是用数组实现的&#xff1a;&#xff08;假设我们有8个位置&#xff08;下标0-7&#xff09;&#xff09; #include<stdio.h> #include<malloc.h> #include<assert.h> #include <iostream> #define MAX_SIZE 8#define Elemtype int typedef str…

Android 配置 Kapt 编译器插件

以 Android Studio 2023.3.1 最新版本为准。 步骤1:打开版本信息配置文件 找到libs.versions.toml文件。 这是打开后的样子&#xff1a; 步骤2&#xff1a;配置版本信息 你需要在[plugins]下面添加一条kapt的配置信息&#xff1a; 要添加的配置信息如下&#xff1a; jetbr…

YOLOv8_pose的训练、验证、预测及导出[关键点检测实践篇]

1.关键点数据集划分和配置 从上面得到的数据还不能够直接训练,需要按照一定的比例划分训练集和验证集,并按照下面的结构来存放数据,划分代码如下所示,该部分内容和YOLOv8的训练、验证、预测及导出[目标检测实践篇]_yolov8训练测试验证-CSDN博客是重复的,代码如下: …

粒子辐照环境中相机镜头防护及LabVIEW图像处理注意事项

在粒子辐照环境测试电路板性能的实验中&#xff0c;需要对相机镜头进行有效防护&#xff0c;同时利用LabVIEW进行图像识别和处理。本文将讨论相机镜头防护的关键因素和LabVIEW处理过程中的注意事项&#xff0c;包括防辐射材料选择、辐射屏蔽措施、散热管理、空间布局及LabVIEW软…

CorelCAD v2022.5 解锁版 安装教程(2D制图 3D设计和打印的简化软件)

前言 CorelCAD&#xff0c;加拿大Corel公司开发的一款适用于2D制图、3D设计和打印的简化版CAD软件。它是款专业的2D制图和3D设计软件&#xff0c;拥有行业标准文件兼容性&#xff0c;支持 .DWG、.STL、.PDF、 .CDR*等文件格式&#xff0c;轻松实现协作和项目共享&#xff0c;利…

6818 android 修改开机 logo, 编译脚本分析

问题&#xff1a; 客户需要去掉 android5.1 的开机logo. 说明&#xff1a; 对于Android5.1 来说&#xff0c;uboot 与kernel 的logo 是一个。 过程&#xff1a; 其实对于开机logo 的修改很简单&#xff0c;直接参考厂家手册就可以了。 这是 android4.4 的开机logo 的修改&…

Qt | QStackedLayout 类(分组布局或栈布局)、QStackedWidget

01、QStackedLayout 类 1、使用 QStackedLayout 可以实现一个多页面切换的界面,多 页面切换就是类似于选项卡(如右图)类型的界面。 2、QStackedLayout 并没有直接实现多页面切换的办面,只是我们可以通过该类实现多页面切 换的功能,因此要使用 QStackedLayout 类实现多面面…

LeetCode 第399场周赛个人题解

100323. 优质数对的总数 I 原题链接 100323. 优质数对的总数 I 思路分析 签到题 AC代码 class Solution:def numberOfPairs(self, nums1: List[int], nums2: List[int], k: int) -> int:n, m len(nums1), len(nums2)ret 0for i in range(n):for j in range(m):if nu…

GDPU JavaWeb mvc模式

搭建一个mvc框架的小实例。 简易计算器 有一个名为inputNumber.jsp的页面提供一个表单&#xff0c;用户可以通过表单输入两个数和运算符号提交给Servlet控制器&#xff1b;由名为ComputerBean.java生成的JavaBean负责存储运算数、运算符号和运算结果&#xff0c;由名为handleCo…

qt-C++笔记之使用QtConcurrent异步地执行槽函数中的内容,使其不阻塞主界面

qt-C笔记之使用QtConcurrent异步地执行槽函数中的内容&#xff0c;使其不阻塞主界面 code review! 参考博文&#xff1a; qt-C笔记之使用QtConcurrent异步地执行槽函数中的内容&#xff0c;使其不阻塞主界面 qt-C笔记之QThread使用 文章目录 qt-C笔记之使用QtConcurrent异步地…

23种设计模式顺口溜

口诀&#xff1a; 原型 抽风 &#xff0c;单独 建造 工厂 &#xff08;寓意&#xff1a;&#xff08;这里代指本来很简单的东西&#xff0c;却要干工厂这里复杂的业务&#xff09; 抽风&#xff1a;抽象工厂单独&#xff1a;单例桥代理组合享元适配器&#xff0c;&#xff0…

【SpringBoot】SpringBoot中防止接口重复提交(单机环境和分布式环境)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f33c;前言 &#x1f512;单机环境下防止接口重复提交 &#x1f4d5;导入依赖 &#x1f4c2;项目结构 &#x1f680;创建自定义注解 ✈创建AOP切面 &#x1f697;创建Conotroller &#x1f4bb;分布…

mysql实战——Mysql8.0高可用之双主+keepalived

一、介绍 利用keepalived实现Mysql数据库的高可用&#xff0c;KeepalivedMysql双主来实现MYSQL-HA&#xff0c;两台Mysql数据库的数据保持完全一致&#xff0c;实现方法是两台Mysql互为主从关系&#xff0c;通过keepalived配置VIP&#xff0c;实现当其中的一台Mysql数据库宕机…

YOLOv9改进策略 | 图像去雾 | 利用图像去雾网络UnfogNet辅助YOLOv9进行图像去雾检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用UnfogNet超轻量化图像去雾网络,我将该网络结合YOLOv9针对图像进行去雾检测(也适用于一些模糊场景),我将该网络结构和YOLOv9的网络进行结合同时该网络的结构的参数量非常的小,我们将其添加到模型里增加的计算量和参数量基本可…

2000 年至 2015 年中国(即水稻、小麦和玉米1km 网格)三种主要作物年收获面积的时空变化

摘要 可靠、连续的主要作物收获面积信息对于研究地表动态和制定影响农业生产、土地利用和可持续发展的政策至关重要。然而&#xff0c;中国目前还没有高分辨率的空间明确和时间连续的作物收获面积信息。全国范围内主要农作物收获面积的时空格局也鲜有研究。在本研究中&#xf…