博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4. 寻找两个有序数组的中位数
阅读量:6825 次
发布时间:2019-06-26

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

 

https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 

  • 此题的关键是需要确定两个数组的大小,时刻保证左边=右边,数组的奇偶数可以用数学公式去解决。

 

using System;public class Problems4{
public double FindMedianSortedArrays(int[] nums1, int[] nums2) { int m = nums1.Length, n = nums2.Length; //先保证 后面的数组的长度大于前面的数组 if (m > n) { int[] temp = nums1; nums1 = nums2; nums2 = temp; int tmp = m; m = n; n = tmp; } //halfLen 当m+n为奇数的时候,取值是最中间的那个数,为偶数的时候,取值是偏后面的那个值 int iMin = 0, iMax = m, halfLen = (m + n + 1) / 2; while (iMin <= iMax) { int i = (iMin + iMax) / 2, j = halfLen - i; if (i < iMax && nums2[j - 1] > nums1[i]) { //前面的最大大于后面的最小,需要i向后移动 iMin = i + 1; } else if (i > iMin && nums1[i - 1] > nums2[j]) { iMax = i - 1; } else { int maxLeft = 0; if (i == 0) maxLeft = nums2[j - 1]; else if (j == 0) maxLeft = nums1[i - 1]; else maxLeft = Math.Max(nums1[i - 1], nums2[j - 1]); if ((m + n) % 2 == 1) return maxLeft; int minRight = 0; if (i == m) minRight = nums2[j]; else if (j == n) minRight = nums1[i]; else minRight = Math.Min(nums1[i], nums2[j]); return (maxLeft + minRight) / 2.0; } } return 0.0; } }

 

转载于:https://www.cnblogs.com/kanekiken/p/10434278.html

你可能感兴趣的文章
HDOJ-1015 Safecracker 【DFS】
查看>>
读书笔记-->Java经典编程300例--明日科技--清华大学出版社(第一版)
查看>>
如何在存储过程中自动添加分区
查看>>
[并查集] POJ 1611 The Suspects
查看>>
C#设计模式总结
查看>>
团队开发------第一次冲刺第4天
查看>>
R对term进行层次聚类完整实例(tm包)
查看>>
20151124001 关闭C#主窗体弹出是否关闭对话框
查看>>
Excel中添加下拉框
查看>>
12-01JavaScript事件(Events)
查看>>
12-19Windows窗体应用程序之记事本(2)
查看>>
python连接数据库使用SQLAlchemy
查看>>
HAproxy和TIME WAIT的一次问题排查
查看>>
高效运维--数据库坐而论道活动
查看>>
pytorch怎么抽取中间的特征或者梯度
查看>>
visual studio用"查找替换"来删掉源代码中所有//方式的纯注释和空行
查看>>
Groovy
查看>>
滑动窗口的最大值
查看>>
[转]BT常用渗透命令
查看>>
面向.Net程序员的前端优化
查看>>