88. 合并两个有序数组
方法一:
class Solution {
public :
void merge ( vector< int > & nums1, int m, vector< int > & nums2, int n) {
for ( int i = 0 ; i< n; i++ ) {
nums1[ m+ i] = nums2[ i] ;
}
sort ( nums1. begin ( ) , nums1. end ( ) ) ;
}
} ;
方法二:
class Solution {
public :
void merge ( vector< int > & nums1, int m, vector< int > & nums2, int n) {
nums1. erase ( nums1. begin ( ) + m, nums1. end ( ) ) ;
nums2. erase ( nums2. begin ( ) + n, nums2. end ( ) ) ;
vector< int > tmp;
while ( n && m) {
if ( nums1. front ( ) <= nums2. front ( ) ) {
tmp. push_back ( nums1. front ( ) ) ;
nums1. erase ( nums1. begin ( ) ) ;
m-- ;
} else {
tmp. push_back ( nums2. front ( ) ) ;
nums2. erase ( nums2. begin ( ) ) ;
n-- ;
}
}
if ( ! m) {
tmp. insert ( tmp. end ( ) , nums2. begin ( ) , nums2. end ( ) ) ;
nums1 = tmp;
}
if ( ! n) {
tmp. insert ( tmp. end ( ) , nums1. begin ( ) , nums1. end ( ) ) ;
nums1 = tmp;
}
}
} ;
方法三:性能最好
class Solution {
public :
void merge ( vector< int > & nums1, int m, vector< int > & nums2, int n) {
int p1 = 0 , p2 = 0 ;
int sorted[ m + n] ;
int cur;
while ( p1 < m || p2 < n) {
if ( p1 == m) {
cur = nums2[ p2++ ] ;
} else if ( p2 == n) {
cur = nums1[ p1++ ] ;
} else if ( nums1[ p1] < nums2[ p2] ) {
cur = nums1[ p1++ ] ;
} else {
cur = nums2[ p2++ ] ;
}
sorted[ p1 + p2 - 1 ] = cur;
}
for ( int i = 0 ; i != m + n; ++ i) {
nums1[ i] = sorted[ i] ;
}
}
} ;