笔试代码题--58同城--合并数组,输出两个有序数组的公共有序数组
题目:
输入两个有序整型数组,将数组的相同序列输出,并且保证输出有序,要求最快算法。
示例1:
输入:
[0,2,3,5,8,10,13] [1,2,4,6,8,10]
输出:
[2,8,10]
最快算法,应该用二分法解决,并且要求输出有序,所以代码循环中应该加判断arrayA[i] != arrayA[i - 1]。
函数代码如下:
class Solution {
public:
/**
* 合并数组
* @param arrayA int整型一维数组 数组A
* @param arrayALen int arrayA数组长度
* @param arrayB int整型一维数组 数组B
* @param arrayBLen int arrayB数组长度
* @return int整型vector
*/
vector<int> mergerArrays(int* arrayA, int arrayALen, int* arrayB, int arrayBLen) {
vector<int> res;
int i, low, mid, high;
for (int i = 0; i<arrayALen &&arrayA[i] != arrayA[i - 1]; i++)
{
low = 0;
high = arrayBLen - 1;
while (low <= high)
{
mid = low + (high - low) / 2;
if (arrayA[i] == arrayB[mid])
{
res.push_back(arrayA[i]);
break;
}
else
arrayA[i]<arrayB[mid] ? (high = mid - 1) : (low = mid + 1);
}
}
return res;
}
};