mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
Create 4.cpp
This commit is contained in:
parent
7c136d90b0
commit
843ac0e9bc
77
LeetCode-CN/4.cpp
Normal file
77
LeetCode-CN/4.cpp
Normal file
|
@ -0,0 +1,77 @@
|
|||
#include <algorithm>
|
||||
class Solution {
|
||||
public:
|
||||
void forward_until(vector<int>& nums1, vector<int>& nums2,
|
||||
int lenA,int lenB,
|
||||
int& idxA, int& idxB, int& passed, int midLen)
|
||||
{
|
||||
while (idxA < lenA&&idxB < lenB && passed < midLen)
|
||||
{
|
||||
if (nums1[idxA] < nums2[idxB])
|
||||
{
|
||||
idxA++;
|
||||
passed++;
|
||||
}
|
||||
else
|
||||
{
|
||||
idxB++;
|
||||
passed++;
|
||||
}
|
||||
}
|
||||
while (idxA < lenA&&passed < midLen)
|
||||
{
|
||||
idxA++;
|
||||
passed++;
|
||||
}
|
||||
while (idxB < lenB&&passed < midLen)
|
||||
{
|
||||
idxB++;
|
||||
passed++;
|
||||
}
|
||||
}
|
||||
|
||||
int getCurrent(vector<int>& nums1, vector<int>& nums2,
|
||||
int lenA,int lenB,
|
||||
int idxA, int idxB)
|
||||
{
|
||||
if (idxA < lenA&&idxB < lenB)
|
||||
{
|
||||
return std::min(nums1[idxA], nums2[idxB]);
|
||||
}
|
||||
else if (idxA < lenA)
|
||||
{
|
||||
return nums1[idxA];
|
||||
}
|
||||
else
|
||||
{
|
||||
return nums2[idxB];
|
||||
}
|
||||
}
|
||||
|
||||
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
|
||||
int lenA = nums1.size();
|
||||
int lenB = nums2.size();
|
||||
int sumLen = lenA + lenB;
|
||||
int midLen = sumLen / 2 - (1 - (sumLen % 2));
|
||||
int idxA = 0;
|
||||
int idxB = 0;
|
||||
int passed = 0;
|
||||
|
||||
forward_until(nums1, nums2, lenA, lenB, idxA, idxB, passed, midLen);
|
||||
|
||||
if (sumLen % 2)
|
||||
{
|
||||
return getCurrent(nums1, nums2, lenA, lenB, idxA, idxB);
|
||||
}
|
||||
else
|
||||
{
|
||||
int step1 = getCurrent(nums1, nums2, lenA, lenB, idxA, idxB);
|
||||
|
||||
forward_until(nums1, nums2, lenA, lenB, idxA, idxB, passed, midLen + 1);
|
||||
|
||||
int step2 = getCurrent(nums1, nums2, lenA, lenB, idxA, idxB);
|
||||
|
||||
return (step1 + step2) / 2.0;
|
||||
}
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue
Block a user