*[Lintcode]Merge Sorted Array II
2016-02-21 23:45
211 查看
Merge two given sorted integer array A and B into
a new sorted integer array.
与上一道类似
class Solution {
/**
* @param A and B: sorted integer array A and B.
* @return: A new sorted integer array
*/
public int[] mergeSortedArray(int[] A, int[] B) {
int[] res = new int[A.length + B.length];
int indexA = 0, indexB = 0;
int indexR = 0;
while(indexA < A.length && indexB < B.length) {
if(A[indexA] > B[indexB]) {
res[indexR++] = B[indexB++];
}
else {
res[indexR++] = A[indexA++];
}
}
while(indexA < A.length) res[indexR++] = A[indexA++];
while(indexB < B.length) res[indexR++] = B[indexB++];
return res;
}
}
优化:如果一个数组很长,一个数组很短,这种情况下,首先拷贝长数组到结果数组中,然后对短数组的每个值在长数组中找到相应位置插入。时间复杂度仍为O(n)。继续优化的话,可以在寻找插入位置时采用二分查找法等
a new sorted integer array.
与上一道类似
class Solution {
/**
* @param A and B: sorted integer array A and B.
* @return: A new sorted integer array
*/
public int[] mergeSortedArray(int[] A, int[] B) {
int[] res = new int[A.length + B.length];
int indexA = 0, indexB = 0;
int indexR = 0;
while(indexA < A.length && indexB < B.length) {
if(A[indexA] > B[indexB]) {
res[indexR++] = B[indexB++];
}
else {
res[indexR++] = A[indexA++];
}
}
while(indexA < A.length) res[indexR++] = A[indexA++];
while(indexB < B.length) res[indexR++] = B[indexB++];
return res;
}
}
优化:如果一个数组很长,一个数组很短,这种情况下,首先拷贝长数组到结果数组中,然后对短数组的每个值在长数组中找到相应位置插入。时间复杂度仍为O(n)。继续优化的话,可以在寻找插入位置时采用二分查找法等
相关文章推荐
- LintCode Majority Number iii
- LintCode-最大数
- Subtree
- LintCode --number-of-airplanes-in-the-sky(数飞机)
- LintCode --invert-binary-tree(翻转二叉树)
- LintCode --find-the-missing-number(寻找缺失的数)
- LintCode--best-time-to-buy-and-sell-stock(买卖股票的最佳时机)
- LintCode--best-time-to-buy-and-sell-stock-ii(买卖股票的最佳时机 II)
- 中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
- LintCode 翻转二叉树
- LintCode 寻找缺失的数
- LintCode 更新二进制位
- Lintcode 二叉树的后序遍历
- Lintcode 二叉树中序遍历
- Lintcode 二叉树前序遍历
- Lintcode 尾部零的个数
- Lintcode 比较字符串
- Lintcode 主元素
- Lintcode解题笔记 - 岛屿的个数
- LintCode -合并两个排序链表