当前位置: 首页 > news >正文

力扣4寻找两个正序数组的中位数

1.实验内容

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

2.实验目的

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

3.基本思路

碰到时间复杂度要求log的,肯定用二分查找,即每次在现有数据的一半中找,下一次再一半,每次循环可以将查找范围缩小一半。但是我这里用多的是双指针算法,一起查找,不需要归并数组,只需找到中位数的下标,但是复杂度仍然是O(min(m+n))

4.算法分析

首先需要通过判断`m`和`n`的大小来确定两个数组是否为空。

如果两个数组都不为空,则使用双指针法遍历两个数组,将较小的元素依次添加到动态数组`temp`中,直到找到第k+1小的元素为止。

如果其中一个数组为空,则直接将另一个非空数组赋值给`temp`。最后,根据`(m+n)%2`的值来判断中位数的位置。如果为奇数,则直接取`temp[k]`作为结果;如果为偶数,则取`temp[k]`和`temp[k-1]`的平均值作为结果。

5.实验心得

碰到时间复杂度要求log的,肯定用二分查找;但是双指针算法比普通的归并算法还是要好一些。

代码:

class Solution {
public:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {float result;int m=nums1.size();int n=nums2.size();int k=(m+n)/2;vector <int> temp;int i=0,j=0;int count=0;//如两个数组不为空,找到前k+1小数存入新数组if(m>0&& n>0){while(count<=k){if(i==m){temp.push_back(nums2[j++]);count++;continue;}if(j==n){temp.push_back(nums1[i++]);count++;continue;}temp.push_back(nums1[i]<=nums2[j]?nums1[(i++)]:nums2[(j++)]);count++;}}//其中一个数组为空的情况下else if(m==0) temp=nums2;else if(n==0) temp=nums1;//返回中位数if((m+n)%2!=0){result=temp[k];}else {result=(float(temp[k])+float(temp[k-1]))/2;}return result;}    
};

(PS:不是我写的)

http://www.lryc.cn/news/322670.html

相关文章:

  • jmeter之常用函数-第六天
  • 原创!分解+集成思想新模型!VMD-CNN-BiGRU-Attention一键实现时间序列预测!以风速数据集为例
  • ab (Apache benchmark) - 压力/性能测试工具
  • 除了Confluence,有没有其他工具一样好用?
  • 查询表中数据(全列/特定列/表达式,where子句(比较/逻辑运算符),order by子句,limit筛选分页),mysql执行顺序
  • 【Linux】多线程概念 | POSIX线程库
  • Java Spring AOP代码3分钟快速入手
  • .NET开源快速、强大、免费的电子表格组件
  • docker一键部署若依前后端分离版本
  • Java项目开发之fastjson详解
  • 面试算法-62-盛最多水的容器
  • 【智能算法】海洋捕食者算法(MPA)原理及实现
  • 刷题DAY24 | LeetCode 77-组合
  • Spring Boot为什么默认使用CGLIB动态代理
  • 算法详解——Dijkstra算法
  • 利用GANs进行图像生成
  • Flutter-底部弹出框(Widget层级)
  • 聚焦两会:数字化再加速,VR全景助力制造业转型
  • 数据挖掘之关联规则
  • java:java.util.BitSet对象的Jackson序列化和反序列化实现
  • Go语言学习01-基本程序结构
  • rundeck k8s部署踩坑
  • 每天学习几道面试题|Kafka(二)架构设计类
  • Spring 实现 OAuth2 授权之解决方案
  • el-select使用filterable下拉无法关闭得问题
  • 基于javaweb(springboot)城市地名地址信息管理系统设计和实现
  • vue iframe实现父页面实时调用子页面方法和内容
  • HarmonyOS ArkTS 开发基础/语言
  • AI大模型学习
  • 2024年【T电梯修理】考试内容及T电梯修理作业考试题库