leecode第四题(寻找两个有序数组的中位数)

题解:





class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m = nums1.size();
int n = nums2.size();
if (m > n) return findMedianSortedArrays(nums2, nums1);//保证nums1个数少于nums2
int iMin = , iMax = m, halfLen = (m + n + ) / ;
while (iMin <= iMax) {
int i = (iMin + iMax) / ;
int j = halfLen - i;//保证左右部分数目一样多
if (i < iMax && nums2[j - ] > nums1[i]) {
iMin = i + ; // i is too small
}
else if (i > iMin && nums1[i - ] > nums2[j]) {
iMax = i - ; // i is too big
}
else { // i is perfect,这里满足左部分最大点小于等于右部分最小点
int maxLeft = ;
if (i == ) { maxLeft = nums2[j - ]; }
else if (j == ) { maxLeft = nums1[i - ]; }
else { maxLeft = max(nums1[i - ], nums2[j - ]); }//这些都是极值情况,放在最后输出处理即可
if ((m + n) % == ) { return maxLeft; }
int minRight = ;
if (i == m) { minRight = nums2[j]; }
else if (j == n) { minRight = nums1[i]; }
else { minRight = min(nums2[j], nums1[i]); }
return (maxLeft + minRight) / 2.0;//偶数个的中位数
}
}
return 0.0;
}
};
总结:
我很惭愧,这个题写了三个多小时都没做出来,我一开始看到时间复杂度,想到二分法,然后不停判断并删除两个数组中大于中位数的值,然后稳定条件是两个数组剩余个数是m+n的一半,程序就是有问题。。。
总得来说还是没有洞悉最有价值的规律,分析情况又把我绕迷糊了,唉,学习到了。
leecode第四题(寻找两个有序数组的中位数)的更多相关文章
- LeetCode刷题:第四题 寻找两个有序数组的中位数
题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 ...
- leetcode第四题:两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
- LeetCode Golang 4. 寻找两个有序数组的中位数
4. 寻找两个有序数组的中位数 很明显我偷了懒, 没有给出正确的算法,因为官方的解法需要时间仔细看一下... func findMedianSortedArrays(nums1 []int, nums ...
- 0004. 寻找两个有序数组的中位数(Java)
4. 寻找两个有序数组的中位数 https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 最简单的就是用最简单的,把两个数组分别抽出然 ...
- Leetcode(4)寻找两个有序数组的中位数
Leetcode(4)寻找两个有序数组的中位数 [题目表述]: 给定两个大小为 m 和 n 的有序数组 nums1 和* nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O( ...
- Java实现 LeetCode 4 寻找两个有序数组的中位数
寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 n ...
- leetcode刷题四<寻找两个有序数组的中位数>
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
- 寻找两个有序数组的中位数 C++实现leetcode系列(四)
给定两个大小为 m 和 n 的有序数组 nums1和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不 ...
- Leetcode题库——4.寻找两个有序数组的中位数
@author: ZZQ @software: PyCharm @file: findMedianSortedArrays.py @time: 2018/10/10 19:24 说明:给定两个大小为 ...
- leetcode 4 寻找两个有序数组的中位数 二分法&INT_MAX
小知识 INT_MIN在标准头文件limits.h中定义. #define INT_MAX 2147483647#define INT_MIN (-INT_MAX - 1) 题解思路 其实是类似的二分 ...
随机推荐
- 今日总结(linux和plsql)
#case ...when语句(根据字段不同值显示不同结果) ##1)case ...when语句的使用方法一: 语法格式: case column_name when value1 then res ...
- PHP API接口签名验证
hash_hmac 在php中hash_hmac函数就能将HMAC和一部分哈希加密算法相结合起来实现HMAC-SHA1 HMAC-SHA256 HMAC-MD5等等算法.函数介绍如下: string ...
- Golang数组注意细节
数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化. var arr[]int,这个arr就是slice切片. 数组中的元素可以是任何数据类型,包括值类型和引用类型, ...
- End of script output before headers错误解决方法
注意是否丢失两个换行符\n\n printf("Content-type: text/html;charset=utf-8\n\n");
- Python 3 实现色情图片识别
Python 3 实现色情图片识别 项目简介 项目内容 本实验将使用 Python3 去识别图片是否为色情图片,我们会使用到 PIL 这个图片处理库,会编写算法来划分图像的皮肤区域. 项目知识点 Py ...
- UI自动化(二)css选择器
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 20145326蔡馨熤《网络对抗》—— Web基础
20145326蔡馨熤<网络对抗>—— Web基础 1.实验后回答问题 (1)什么是表单. 表单是一个包含表单元素的区域,表单元素是允许用户在表单中输入信息的元素,表单在网页中主要负责数据 ...
- java的MVC与C#
Views: @{ Layout = "~/Views/Shared/_Layout.cshtml"; } @{ ViewBag.Title = "Index" ...
- ImageView控件有关问题
了解了一下ImageView控件,这个控件本身及其属性倒没有什么特别之处.只是在看<第一行代码>时,郭大神写到创建drawable-xhdpi文件有些问题,首先先说drawable和mip ...
- topcoder srm 505 div1
problem1 link 设行数为$n$列数为$m$ 对于任意的两行$r_{1},r_{2}$以及任意的两列$c_{1},c_{2}$所确定的四个格子,只要知道其中的三个就能确定第四个,且必须要三个 ...