您的位置:首页 > 其它

88.[Leetcode]Merge Sorted Array

2016-06-10 00:25 323 查看

Pre:

一开始用了sort,果断慢的要死,后面好歹是想办法提速了一下

Version1

class Solution {
public:
void merge(vector<int>& num1, int m, vector<int>& num2, int n) {
// 时刻记住边界情况
if(!n) return;
int it_1,it_2,temp;
for(int i=0; i<m; i++){
it_1 = num1[i];
it_2 = num2[0];
if(it_1 > it_2) {
num1[i] = it_2; // 先把nums_1换了
num2[0] = it_1;
// 遍历nums2,直到遇到比较小的,此时遍历之后可以考虑使用快排
for(int j=1; j<n; j++){
if(num2[j] >= num2[j-1]) {
break;
} else {
temp = num2[j];
num2[j] = num2[j-1];
num2[j-1] = temp;
}
}
}
}

for(int i=0; i<n; i++) {
num1[m+i] = num2[i];
}

}
};


大神算法

之前也有类似的题,但是这道题我尽然没有想到。那就是倒着来。逆向思维

public void merge(int[] nums1, int m, int[] nums2, int n) {
int p=m+n;
int p1=m-1;
int p2=n-1;
while(--p>=0){
if((p1>=0 && p2>=0) && nums1[p1] > nums2[p2])
nums1[p] =nums1[p1--];
else if(p2>=0)
nums1[p] =nums2[p2--];
}
}


简单到炸
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode