1. Merge Sorted Array

https://leetcode.com/explore/interview/card/top-interview-questions-easy/96/sorting-and-searching/587/

merge sort:

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

merge sort with erase vector.begin():

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

2. First Bad Version

https://leetcode.com/explore/interview/card/top-interview-questions-easy/96/sorting-and-searching/774/

binary search:

  1. // The API isBadVersion is defined for you.
  2. // bool isBadVersion(int version);
  3. class Solution {
  4. public:
  5. int firstBadVersion(int n) {
  6. return firstBadVersion(1, n, n);
  7. }
  8. private:
  9. int firstBadVersion(int l, int r, int n){
  10. if(l < r){
  11. int m = l + (r - l) / 2;
  12. if(!isBadVersion(m))
  13. return firstBadVersion(m+1, r, n);
  14. else if(isBadVersion(m)){
  15. return firstBadVersion(l, m, n);
  16. }
  17. }
  18. return l;
  19. }
  20. };