https://leetcode.com/problems/merge-sorted-array/

1. Use STL sort():

  1. //4 ms 9.1 MB
  2. class Solution {
  3. public:
  4. void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
  5. for(int i = 0; i < n; i++){
  6. nums1[m+i] = nums2[i];
  7. }
  8. sort(nums1.begin(), nums1.end());
  9. }
  10. };

2. Use merge sort:

  1. //8 ms 13.2 MB
  2. class Solution {
  3. public:
  4. void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
  5. for(int i = 0; i < n; i++){
  6. nums1[m+i] = nums2[i];
  7. }
  8. //sort(nums1.begin(), nums1.end());
  9. mergeSort(nums1);
  10. }
  11. private:
  12. void merge(vector<int>& arr, int l, int m, int r){
  13. int n1 = m - l + 1;
  14. int n2 = r - m;
  15. int i, j, k;
  16. vector<int> L;
  17. vector<int> R;
  18. for(i = 0; i < n1; i++){
  19. L.push_back(arr[l+i]);
  20. }
  21. for(j = 0; j < n2; j++){
  22. R.push_back(arr[m+1+j]);
  23. }
  24. i = 0;
  25. j = 0;
  26. k = l;
  27. while(i < n1 && j < n2){
  28. if(L[i] <= R[j]){
  29. arr[k] = L[i];
  30. i++;
  31. } else {
  32. arr[k] = R[j];
  33. j++;
  34. }
  35. k++;
  36. }
  37. while(i < n1){
  38. arr[k] = L[i];
  39. i++;
  40. k++;
  41. }
  42. while(j < n2){
  43. arr[k] = R[j];
  44. j++;
  45. k++;
  46. }
  47. }
  48. void mergeSort(vector<int>& arr, int l, int r){
  49. if(l < r){
  50. int m = l + (r - l) / 2;
  51. mergeSort(arr, l, m);
  52. mergeSort(arr, m + 1, r);
  53. merge(arr, l, m, r);
  54. }
  55. }
  56. void mergeSort(vector<int>& arr){
  57. int n = arr.size();
  58. mergeSort(arr, 0, n-1);
  59. }
  60. };