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] ; } }
} ;