当前位置:网站首页>力扣——4. 寻找两个正序数组的中位数
力扣——4. 寻找两个正序数组的中位数
2022-07-26 06:23:00 【weixin_54096215】
题目:

思路:

1.先将两个数组进行合并,分别计算数组1和数组2的长度l=m+n;
2.定义两个指针,分别放在两个数组的最后一个位置 ;
3.判断,因为是正序(从小到大)的数组,所以可以判断nums1第一个数是否大于nums2第一个数nums1[aStart]<nums2[bStart]
4.判断,是否还有余下的数,如果有,直接放到后面
代码:
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len1 = nums1.length;
int len2 = nums2.length;
// 合成的数组
int[] res = new int[len1+len2];
int index = 0;
int left = 0, right = 0;
// 归并排序合成部分
while(left<len1&&right<len2) {
if(nums1[left]<nums2[right]) {
res[index++] = nums1[left++];
} else {
res[index++] = nums2[right++];
}
}
// 判断nums1剩余还是nums2剩余,并将剩余部分加入到合成的数组之后
while(left<len1) {
res[index++] = nums1[left++];
}
while(right<len2) {
res[index++] = nums2[right++];
}
// 判断合成后的数组的长度,求出中位数。返回的是double类型
if((len1+len2)%2==1) {
return (double) res[(len1+len2)/2];
} else {
return (double) (res[(len1+len2)/2]+res[(len1+len2)/2-1])/2;
}
}
}
升级代码:
public double findMedianSortedArrays(int[] A, int[] B) {
int m = A.length;
int n = B.length;
int len = m + n;
// left用来保存上一次遍历的结果,right表视当前遍历的结果。因为偶数时:需要两个值
int left = -1, right = -1;
// aStart指向此时A数组的位置,bStart指向此时B数组的位置
int aStart = 0, bStart = 0;
for (int i = 0; i <= len / 2; i++) {
// 每次开始新的一边遍历时,保存上次的遍历结果
left = right;
// 数组A指针aStart后移的条件:aStart没有到A的最后,此时A位置的数字小于B位置的数字。此时要判断B的指针bStart是否越界,如果越界的话就不去判断此时A位置的值与B位置的值的大小,而是继续遍历A当前位置的值。
if (aStart < m && (bStart >= n || A[aStart] < B[bStart])) {
right = A[aStart++];
} else {
right = B[bStart++];
}
}
if ((len & 1) == 0)
return (left + right) / 2.0;
else
return right;
}
参考链接:
边栏推荐
- 时序动作定位 | 用于弱监督时态动作定位的细粒度时态对比学习(CVPR 2022)
- Alibaba cloud OSS binding custom domain name
- 【C语言】文件操作
- 【Day_02 0419】倒置字符串
- Map集合继承结构
- [day_010418] delete public string
- Markdown add Emoji expression
- Easycvr video square channel display and video access full screen display style problem repair
- Matlab vector and matrix
- BPG笔记(四)
猜你喜欢

Optical quantum milestone: 3854 variable problems solved in 6 minutes

【保姆级】包体积优化教程

白盒测试的概念、目的是什么?及主要方法有哪些?

PHP 多任务秒级定时器的实现方法

Cdga | how to build data asset catalogue?

YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors

Embedded sharing collection 15

【Day05_0422】C语言选择题

移动web

Convolutional neural network (II) - deep convolutional network: case study
随机推荐
[C language] address book dynamic version and document version
CCTV dialogue ZTE: why must the database be in your own hands?
Why use the static keyword when defining methods
[day_020419] inverted string
Interview difficulties: difficulties in implementing distributed session, this is enough!
How can machinery manufacturing enterprises do well in production management with the help of ERP system?
[1]数学建模基础入门知识
多目标检测
Convolutional neural network (IV) - special applications: face recognition and neural style transformation
【Day_02 0419】倒置字符串
[day_020419] sort subsequence
Jz36 binary search tree and bidirectional linked list
移动web
Convolutional neural network (II) - deep convolutional network: case study
Huawei cloud koomessage is a new marketing weapon in the hot public beta
将金额数字转换为大写
定义方法时为什么使用static关键字
Sequential action localization | fine grained temporal contrast learning for weak supervised temporal action localization (CVPR 2022)
K. Link with Bracket Sequence I dp
H. Take the elevator greedy