【算法集训之线性表篇】Day 07

news2024/9/25 1:14:23

文章目录

  • 题目
  • 基本设计思想
  • 代码实现
  • 效果

题目

一个长度为L(L>=1)的升序序列S,处在第[L/2]个位置的数称为S的中位数。例如,若序列S1={11,13,15,17,19},则S1的中位数是15,两个序列的中位数是含它们所有元素的升序序列的中位数,例如,若S2={2,4,6,8,20},则S1和S2的中位数是11。现在有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。要求:

  1. 给出算法的基本设计思想。
  2. 根据设计思想,用C/C++实现算法。
  3. 说明所设计的算法的时间复杂度和空间复杂度。

基本设计思想

  1. 根据题目要求,主要要求将两个升序序列合并为整体升序序列并返回整体序列中的中位数。
  2. 因此,我们可以考虑现根据给出两个升序序列的元素个数,计算出中位数再最终整体有序序列中的存在位置X。
  3. 然后,利用双指针算法,设置指针i,j分别指向序列A和序列B,升序合并两个序列过程中与计算出的中位数下标比较,若相等,则返回第X个元素,即为题目所要求的中位数。

代码实现

int LinearList::Question_11()
{
    Array arr1,arr2;
    arr1.length = 5;
    cout<<"insert 5 nums to arr1:"<<endl;
    for(int i = 0;i < arr1.length;i ++)
    {
        cin >> arr1.data[i];
    }

    arr2.length = 5;
    cout<<"insert 5 nums to arr2:"<<endl;
    for(int i = 0;i < arr2.length;i ++)
    {
        cin >> arr2.data[i];
    }

    arr.length = arr1.length + arr2.length;

    int mid = arr.length/2 - 1;   //计算最终升序序列中位数坐在位置下标
    cout << "mid index : "<<mid<<endl;

    int i = 0,j = 0;    //设置哨兵i,j分别指向数组arr1和数组arr2
    int k = 0;          //设置变量k记录最终升序序列元素下标

    while(i < arr1.length && j < arr2.length)
    {
        if(arr1.data[i] <= arr2.data[j])
        {
            if(k == mid)    //判断是否为中位数下标
            {
                cout<< "Mid num : "<<arr1.data[i];
                return arr1.data[i];
            }
            k++;
            i++;
        }
        else
        {
            if(k == mid)    //判断是否为中位数下标
            {
                cout<< "Mid num : "<<arr2.data[j];
                return arr2.data[j];
            }
            k++;
            j++;
        }
    }

    while(i < arr1.length)
    {
        if(k == mid)    //判断是否为中位数下标
        {
            cout<< "Mid num : "<<arr1.data[i];
            return arr1.data[i];
        }
        k++;
        i++;
    }

    while(j < arr2.length)
    {
        if(k == mid)    //判断是否为中位数下标
        {
            cout<< "Mid num : "<<arr2.data[j];
            return arr2.data[j];
        }
        k++;
        j++;
    }
}

效果

在这里插入图片描述

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

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

相关文章

使用ida pro反编译并修改so库

快速搜索 图表视图 找到需要修改的行 Edit -> Patch program -> change byte… 复制指令 到这个网站Online ARM to HEX 点击可以切换为HEX to ARM 构造待修改的指令 修改好后复制HEX字符串 Edit -> Patch program -> Apply patches to input file

测试工程师的个人年终总结报告模板

目录 正文之前的思考&#xff1a; 年终总结报告 开篇语 1.  项目概述 1.1  项目情况 1.2  工作流程 1.3  个人角色 1.4  完成情况 2.  工作业绩 3.  亮点和不足 4.  未来展望 总结&#xff1a; 正文之前的思考&#xff1a; 开始编排文档之前来做一个…

FAM NHS ester,5-FAM azide,两者用于标记核苷酸的荧光试剂

一、FAM NHS ester,6-isomer&#xff0c;92557-81-8 理论分析&#xff1a; 中文名&#xff1a;羧基荧光素-活性酯&#xff0c;6-异构体&#xff0c;6-羧基荧光素琥珀酰亚胺酯,6-羧基荧光素-活性酯 英文名&#xff1a;FAM NHS ester,6-isomer&#xff0c;6-FAM-NHS&#xff0c;…

D. Survey in Class

D. Survey in Class Problem - D - Codeforces 思路&#xff1a;题目要求的是最大值与最小值的差值最大&#xff0c;那么我们能够想到&#xff0c;一定是两个人比较得到的最大的差值&#xff0c;假设a与b比较得到的最大的差值&#xff0c;因为如果提问了这两个区间都不包含的&…

单个电源模块带电感的直流压降仿真(二)

单个电源模块带电感的直流压降仿真(二) 接 单个电源模块带电感的直流压降仿真(一) 在右侧net manager disable all nets鼠标移动到需要仿真的电感前后两端的铜皮上,select net and enable net并且把GND也select和enable上

ceph用户认证

Cephx认证机制 ceph使用cephx协议对客户端进行身份认证 cephx用于对ceph保存的数据进行认证访问和授权&#xff0c;用于对访问ceph的请求进行认证和授权检测&#xff0c;于mon通信的请求都要经过ceph认证通过&#xff0c;但是也可以在mon节点关闭cephx认证&#xff0c;但是关…

微信小程序的目录结构及页面结构的说明

微信小程序的目录结构及页面结构的说明 1. 项目结构2.小程序的页面组成部分3.项目结构和页面结构文件的一些说明3.1. json文件3.2. wxml和wxss3.2.1. wxml3.2.2. wxss 3.2.3. 小程序中的.js文件 4. 微信小程序的宿主环境及运行机制4.1. 宿主环境4.2. 运行机制4.2.1. 小程序启动…

运营规模突破5万台,绿色慧联启动「望岳计划」!

狙击冲锋问鼎&#xff01;7月7日&#xff0c;绿色慧联“望岳计划”在杭州正式启动。远程新能源商用车集团副总裁兼绿色慧联总经理杨东及运营平台各职能部门、区域运营中心负责人共同参加了会议。 今年绿色慧联正面临更加多变的内外部市场环境&#xff0c;电池原材料价格下滑和整…

华为OD机试真题 Java 实现【宜居星球改造计划】【2023 Q2 200分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 大家好&#xff0c;我是哪吒。 做技术&#xff0c;我是认真的&#xff0c;立志于打造最权威的华为OD机试真题专栏&#xff0c;帮助那些与我有同样需求的人&#xff0…

eclipse安装

下载 https://www.eclipse.org/ 安装 选择web开发 启动项目&#xff0c;让选择工作地址 创建java web项目 选择一下运行时 选择好tomcat服务器finish即可 创建maven项目

Mybatis 学习笔记1:构造方法注入

Mybatis 构造方法注入 最近阅读 Mybatis 3.5.8-SNAPSHOT 版本源码&#xff0c;在调试过程中遇到如下异常&#xff1a; org.apache.ibatis.builder.BuilderException:Error in result map MyEmployee.empResultMap.Failed to find a constructor in MyEmployee by arg names […

python基于flask企业会议交换机设备维修批量运维管理系统设计与实现6py09

Python 中存在众多的 Web 开发框架&#xff1a;Flask、Django、Tornado、Webpy、Web2py、Bottle、Pyramid、Zope2 等。近几年较为流行的&#xff0c;大概也就是 Flask 和 Django 了解决的思路&#xff1a; &#xff08;1&#xff09;通过进行需求分析&#xff0c;建立用例模型&…

ansible学习使用

1、ansible官网 官方文档 https://docs.ansible.com/ansible/latest/index.html ansible github页面 https://github.com/ansible/ansible 安装手册&#xff1a;https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html 2、ansible架构简述 …

JavaScrpt_11 Web API 事件流、委托事件、其它事件、元素尺寸与位置

JavaScrpt_11 Web API 事件流、委托事件、其它事件、元素尺寸与位置 前言一、事件流1. 捕获和冒泡2. 阻止冒泡 二、委托事件三、其它事件1. 页面加载事件 2. 元素滚动事件 3. 页面尺寸事件 四、元素尺寸与位置 前言 进一步学习 事件进阶&#xff0c;实现更多交互的网页特效&…

手写CDN基本原理

本文已收录于专栏 《中间件合集》 目录 追本溯源概念说明需求分析核心功能代码实现A用户模块本地DNS模块CDN服务模块缓存服务模块原服务端 总结提升 追本溯源 CDN的发展源于对互联网内容传输速度和用户体验的需求。在互联网发展初期&#xff0c;内容的传输主要依赖于源服务器&a…

Unity/Shader 零碎知识点

坐标系 Unity使用的是左手坐标系&#xff1b;观察空间&#xff0c;通俗来讲就是以摄像机为原点的坐标系&#xff0c;摄像机的前向是z轴的负方向&#xff0c;与模型和世界空间中的定义相反&#xff0c;z轴的坐标减少意味着场景深度的增加 点积 abba|a||b|cos<a,b> 结果为常…

联想ThinkPad如何用U盘重装系统?联想ThinkPad用U盘重装系统教程

联想ThinkPad如何用U盘重装系统&#xff1f;当联想ThinkPad出现系统问题或需要更新操作系统时&#xff0c;使用U盘进行重装是一种快速而可靠的解决方案&#xff0c;使用U盘重装系统不仅简单易行&#xff0c;还能有效避免出现磁盘损坏或网络不稳定所带来的问题&#xff0c;那具体…

零零信安-DD数据泄露报警日报【第203期】

2023.07.10共发现匿名网络资讯信息83,544条&#xff1b;最近7天同比增长-22.2%&#xff1b;最近30天共发现匿名网络资讯信息2,578,034条。 北京零零信安科技有限公司成立于2020年&#xff0c;是国内首家专注于外部攻击面管理&#xff08;EASM&#xff09;的网络安全公司。基于…

DragGAN 离线版V1.3 解压就能用-DragGAN Windows GUI

一、DragGAN是什么 DragGAN是由Max Planck研究所开发的一种新的人工智能工具&#xff0c;它允许用户通过几个点击和拖动来真实地修改照片。DragGAN模型本质上是给各种GAN开发的一种交互式图像操作方法&#xff0c;实现了通过鼠标拉伸图像即可自动生成新图像的神奇功能。用户先…

Shader Graph22-卡通风格(上)

一、打开Unreal&#xff0c;新建Material命名为DemoToonPaint。 二、0.5、0.5、0.5为模拟的光线方向&#xff0c;VertexNormalWS为法线的世界坐标&#xff0c;Dot点积之后得到指定光线方向分布&#xff0c;Multiply(,0.5)和Add(,0.5)是去掉负值。Texture我们需要用photoshop制作…