OR5. 多数组第 K 小数
描述
示例1
输入:
[1,2,3,4],[1,3,4],2
输出:
1
说明:
两个数列中数升序排列是 1 1 2 3 3 4,故第二小的是 1示例2
输入:
[1,2,3,4],[1,3,4],7
输出:
4
C++ 解法, 执行用时: 181ms, 内存消耗: 59096KB, 提交时间: 2022-05-08
static const auto io_sync_off = []() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return nullptr; } (); class Solution { public: int findKthNum(vector<int>& a, vector<int>& b, int t) { int i = 0, j = 0, k = a.size(); while (--t) { if (a[i] < b[j] and i < k) ++i; else ++j; } if (i >= k) return b[j]; if (j >= b.size()) return a[i]; return min(a[i], b[j]); } };
C++ 解法, 执行用时: 215ms, 内存消耗: 59080KB, 提交时间: 2022-05-20
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false); std::cout.tie(nullptr); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param arr1 int整型vector * @param arr2 int整型vector * @param target int整型 * @return int整型 */ int findKthNum(vector<int>& arr1, vector<int>& arr2, int target) { // write code here int i=0,j=0; while(--target) { if(arr1[i]<arr2[j]&&i<arr1.size()) i++; else j++; } if(i>=arr1.size()) return arr2[j]; if(j>=arr2.size()) return arr1[i]; return min(arr1[i],arr2[j]); } };
C++ 解法, 执行用时: 218ms, 内存消耗: 59080KB, 提交时间: 2022-02-14
static const auto io_sync_off = []() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param arr1 int整型vector * @param arr2 int整型vector * @param target int整型 * @return int整型 */ int findKthNum(vector<int>& arr1, vector<int>& arr2, int target) { // write code here int i = 0, j = 0, sz = arr1.size(); while (--target) { if (arr1[i] < arr2[j] and i < sz) ++i; else ++j; } if (i >= sz) return arr2[j]; if (j >= arr2.size()) return arr1[i]; return min(arr1[i], arr2[j]); } };
C 解法, 执行用时: 400ms, 内存消耗: 58924KB, 提交时间: 2022-02-24
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param arr1 int整型一维数组 * @param arr1Len int arr1数组长度 * @param arr2 int整型一维数组 * @param arr2Len int arr2数组长度 * @param target int整型 * @return int整型 * * C语言声明定义全局变量请加上static,防止重复定义 */ int findKthNum(int* arr1, int arr1Len, int* arr2, int arr2Len, int target ) { // write code here int i = 0, j = 0; int result; // if(target == arr1Len + arr2Len)return arr1[arr1Len-1]>arr2[arr2Len-1]?arr1[arr1Len-1]:arr2[arr2Len-1]; while(target--){ if(arr1[i] <= arr2[j]){ result = arr1[i]; i += 1; if(i >= arr1Len && target)return arr2[j+target-1]; }else{ result = arr2[j]; j += 1; if(j >= arr2Len && target)return arr1[i+target-1]; } } return result; }
C++ 解法, 执行用时: 404ms, 内存消耗: 59052KB, 提交时间: 2022-01-08
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param arr1 int整型vector * @param arr2 int整型vector * @param target int整型 * @return int整型 */ int findKthNum(vector<int>& arr1, vector<int>& arr2, int target) { int id1 = 0; int id2 = 0; int result = 0; arr1.push_back(INT_MAX); arr2.push_back(INT_MAX); while (true) { if (arr1[id1] < arr2[id2]) { result = arr1[id1]; ++id1; } else { result = arr2[id2]; ++id2; } if (id1 + id2 == target) return result; } return result; } };