有两个一维数组(元素个数不超过100个)中的元素已按升序排列,编写一个函数将两个数组中的元素归并成一个数组,其中的元素仍然按升序排列。
template <typename T>
void mymerge(const T a, int a_len, const T b, int b_len, T* c)
{
int i, j, k;
i = j = k = 0;
if(a_len == 0) {
goto line1;
} else if(b_len == 0) {
goto line2;
}
while(true) {
if(a[i] < b[j]) {
c[k++] = a[i++];
if(i==a_len) {
line1:
while(j<b_len) {
c[k++] = b[j++];
}
return;
}
} else {
c[k++] = b[j++];
if(j==b_len) {
line2:
while(i<a_len) {
c[k++] = a[i++];
}
return;
}
}
}
}
int a[1000005];
int* findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int i=0,j=0,int tag=0;
while(i<nums1.size()&&j<nums2.size())
{
if(nums1[i]<=nums2[j])
a[tag++]=nums1[i++];
else
a[tag++]=nums2[j++];
}
while(i<nums1.size()) { a[tag++]=nums1[i++]; }
while(j<nums2.size()) { a[tag++]=nums2[j++]; }
return a;
}
想不到您居然能写出如此优美简洁的代码,佩服佩服!
@古宇: 大佬过赞了!
int* sortAndCombine2Array(int array1[] , int array1Len, int array2[] , int array2Len)
{
int i = array1Len;
int j = array2Len;
int k = 0;
int *retArray = NULL;
int array3Len = array1Len + array2Len;
if(array3Len){
retArray =(int*)malloc(array3Len * sizeof(int));
//
//c plus plus use new!
//
while(i && j){
(array1[array1Len - i] > array2[array2Len - j] ) ? (retArray[k++] = array2[array2Len - j--]) : (retArray[k++] = array1[array1Len - i--]);
}
while(i){
retArray[k++] = array1[array1Len - i--];
}
while(j){
retArray[k++] = array2[array2Len - j--];
}
}
return retArray;
}
用C写的可否?