博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Median of Two Sorted Arrays-分治法
阅读量:7049 次
发布时间:2019-06-28

本文共 1571 字,大约阅读时间需要 5 分钟。

题目意思很简单将两个有序数组合并之后的中位数找出来。题目要求使用log(m+n)的时间复杂度来做。

虽然言简意赅,但不得不承认这个题目我自己想了好久也没做出来,隐约觉得应该使用寻找第k大数的算法来做,但是具体到这个题目,编码多次都以失败告终,所以不得不去网上参考下别人的思路和代码。

参考链接:http://blog.csdn.net/zxzxy1988/article/details/8587244

但是这个方法现在已经无法在leetcode上AC,需要在两个递归的return处进行修改。

思路是这样的:

我们寻找两个数组的第k个数,那么我们首先找到两个数组中的第(k/2-1)个数。比较两个数组中这个数的大小来进行不同递归。

 

代码如下:

1     int min(int a,int b) 2     { 3         return a>b?b:a; 4     } 5     double findknumber(int *a,int *b,int al,int bl,int k) 6     { 7         if (al > bl) 8             return findknumber(b, a, bl, al, k); 9         if (al == 0)10             return b[k - 1];11         if (k == 1)12             return min(a[0], b[0]);13         int aindex = min(k / 2, al);14         int bindex = k - aindex;15         if (a[aindex - 1] < b[bindex - 1])16             return findknumber(a + aindex, b, al - aindex, bindex, k - aindex);17         else if (a[aindex - 1] > b[bindex - 1])18             return findknumber(a, b + bindex, aindex, bl - bindex, k - bindex);19         else20             return a[aindex - 1];21 22 23     }24     double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {25         int total=nums1Size+nums2Size;26         if(total%2==1)27             return findknumber(nums1,nums2,nums1Size,nums2Size,total/2+1);28         else29             return (findknumber(nums1,nums2,nums1Size,nums2Size,total/2+1)30                     +findknumber(nums1,nums2,nums1Size,nums2Size,total/2))/2.0;31 32     }

这个代码还存在两个问题,后续我再补充:

存在一个找第k个数的坐标问题;

这个算法的真实时间复杂度如何;

 

转载于:https://www.cnblogs.com/holyprince/p/4623801.html

你可能感兴趣的文章
WordPress 5文章编辑真难用 换回老版经典编辑器教程
查看>>
第二十二章:动画(三)
查看>>
redis-shake数据迁移工具
查看>>
如何保护对外暴露的 Kubernetes 服务
查看>>
2018年人工智能带来了哪些变化,2019年又会发生什么?
查看>>
Python知识点:理解和使用装饰器 @decorator
查看>>
牵扯256万人!国内一AI公司人脸识别数据泄露
查看>>
Linux基础命令---lpc打印机控制
查看>>
Atari 游戏得分提升两个数量级:Uber AI 的新强化学习算法 Go-Explore
查看>>
4月1日云栖精选夜读 | 代号“凤凰”,阿里新零售秘密武器,今年要打入100个城市...
查看>>
swap file在btrfs分区Invalid argument问题
查看>>
C++面向对象高级编程(上) 第二周 侯捷
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
如何在基于Bytom开发过程中集成IPFS
查看>>
后台管理,给列表页新增查询功能,所遇到的问题及感想
查看>>
GraalVM 社区版 1.0 RC15 发布,新一代高性能跨语言虚拟机
查看>>
阿里架构师眼里JVM可以说的那些事
查看>>
C#实现局部峰值查找,功能对应Matlab中的findpeaks.m
查看>>
响应式编程
查看>>
The Road to learn React书籍学习笔记(第一章)
查看>>