search and sort [2]
来源:互联网 发布:淘宝信誉查询客户达 编辑:程序博客网 时间:2024/06/02 22:03
Median of Two Sorted Arrays
我们把问题简化,找两排好序数组的第k小的数。
从前向后取,直到取到第k小的数,时间复杂度O(k)
“`c++
class Solution {
public:
double findMedianSortedArrays(int A[], int m, int B[], int n) {
//merge first
if ((m + n) % 2 == 0)
return double(find((m + n) / 2, A, m, B, n) + find((m + n) / 2 + 1, A, m, B, n)) * 0.5;
else
return double(find((m + n) / 2 + 1, A, m, B, n));
}
int find(int k, int A[], int m, int B[], int n) {
int count = 0, now = INT_MIN;
int i, j;
for (i = 0, j = 0; i < m && j < n;) {
if (A[i] < B[j]) {
++i;
now = A[i-1];
}
else {
++j;
now = B[j-1];
}
++count;
if (count == k) return now;
}
if (i == m)
return B[j + k - count - 1];
else
return A[i + k - count - 1];
}
};
2. 二分法 第一个数组找 k/2 小的数 A[k / 2 - 1],和第二个数组的 k / 2 小的数 B[k / 2 - 1],如果第一个数小,说明答案不可能在第一个数组前 k / 2 个数中;同理,。。。;如果两个数相等,说明这两个数就是我们要找的数。 但是有好多边界条件需要考虑: - [1], [2,3,4,5,6] 让找第4小的数 - [], [2,3,4] 让找第2小的数 - 递归终止应该是k=1的时候,因为k=1,halfk_b = 0, halfk_a = 1, 无限循环了。```c++class Solution {public: double findMedianSortedArrays(int A[], int m, int B[], int n) { if ((m + n) % 2 == 0) { int l = find((m + n) / 2, A, m, B, n); int r = find((m + n) / 2 + 1, A, m, B, n); return double(l + r) / 2.0; } else { return double(find((m + n) / 2 + 1, A, m, B, n)); } } int find(int k, int A[], int m, int B[], int n) { if (k > m + n) return INT_MIN; if (m < n) return find(k, B, n, A, m); //确保A长 if (n == 0) return A[k-1]; if (k == 1) return min(A[0], B[0]); int halfk_b = min(k / 2, n); //B短,不能随便取 int halfk_a = k - halfk_b; if (A[halfk_a - 1] < B[halfk_b - 1]) //a中的前k/2个数是不可能有答案的了 return find(k - halfk_a, A + halfk_a, m - halfk_a, B, n); else if (A[halfk_a - 1] > B[halfk_b - 1]) return find(k - halfk_b, A, m, B + halfk_b, n - halfk_b); else return A[halfk_a - 1]; }};
- search and sort [2]
- search and sort
- Search and Sort
- Sort and Search in C and C++
- merge sort and binary search recursive version
- search sort
- Algorithms Review: Divide and Conquer(Binary Search & Merge Sort)
- search - binary search/sort tree
- hibernate search sort()
- KNOW: Sort & Search
- Insertion Sort and Merge Sort
- bubble sort and linq sort
- Insertion sort and Merge sort
- Insertion Sort and Merge Sort
- 2D Range and Neighbor Search
- pyes Search 的sort用法
- Sqequential Search And Binary Search
- Insertion sort, select sort, Quick sort and Merge sort
- Java虚拟机体系结构 - JAR包的签名与认证
- No package identifier when getting value for resource number 0x0000001c
- Android NDK开发(2)----- JNI多线程
- Eclipse设置、调优、使用
- C#对字符串的加解密
- search and sort [2]
- Linux进程间通信——信号集函数
- 射线和三角形的相交检测(ray triangle intersection test)
- html5新功能1—各种浏览器全屏模式的方法、属性和事件介绍
- jQuery如何获取浏览器的分辨率
- C++ socket编程基础二(三种Socket:TCP,UDP,原始Socket)
- JSON.parse()和JSON.stringify()
- Spring MVC 4.1.3 + MyBatis 零基础搭建Web开发框架(注解模式哦)
- 面向对象的三个基本特征