madhu242

Two pointers

Oct 25th, 2022
831
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.58 KB | Source Code | 0 0
  1. // Sliding window
  2.  
  3. class MaxSumSubArrayOfSizeK {
  4.  public:
  5.   static int findMaxSumSubArray(int k, const vector<int>& arr) {
  6.     int maxSum = 0, sum = 0;
  7.     if (arr.size() < k) {
  8.       return maxSum;
  9.     }
  10.     for (int i = 0; i < arr.size(); i++) {
  11.       if (i < k) {
  12.         sum += arr[i];
  13.         maxSum += arr[i];
  14.       } else {
  15.         sum = sum + arr[i] - arr[i - k];
  16.         maxSum = max(maxSum, sum);
  17.       }
  18.     }
  19.     return maxSum;
  20.   }
  21.  
  22.  
  23. // Pair with target sum
  24. class PairWithTargetSum {
  25.  public:
  26.   static pair<int, int> search(const vector<int>& arr, int targetSum) {
  27.     int left = 0, right = arr.size() - 1;
  28.     pair<int, int> result = make_pair(-1, -1);
  29.     while (left < right) {
  30.       if (arr[left] + arr[right] == targetSum) {
  31.         result.first = left;
  32.         result.second = right;
  33.         break;
  34.       } else if (arr[left] + arr[right] < targetSum) {
  35.         left++;
  36.       } else {
  37.         right--;
  38.       }
  39.     }
  40.     // TODO: Write your code here
  41.     return result;
  42.   }
  43. };
  44.  
  45. // Remove duplicates
  46. class RemoveDuplicates {
  47.  public:
  48.  //[2,3,3,3,6,9,9]
  49.  //[2, 3, 3, 3, 6, 9, 9]
  50.  //[2, 3, 6, 9, 3, 3, 9]
  51.   static int remove(vector<int>& arr) {
  52.     int nDI = 1;
  53.     for (int i = 1; i < arr.size(); i++) {
  54.       if (arr[nDI - 1] != arr[i]) {
  55.         arr[nDI] = arr[i];
  56.         nDI++;
  57.       }
  58.     }
  59.     // TODO: Write your code here
  60.     return nDI;
  61.   }
  62. };
  63.  
  64. // squares of a sorted array
  65.  public:
  66.   static vector<int> makeSquares(const vector<int>& arr) {
  67.     int n = arr.size();
  68.     vector<int> squares(n);
  69.     int left = 0, right = n - 1;
  70.     while (left <= right) {
  71.       int ls = arr[left] * arr[left];
  72.       int rs = arr[right] * arr[right];
  73.  
  74.       if (ls > rs) {
  75.         squares[right - left] = ls;
  76.         left++;
  77.       } else {
  78.         squares[right - left] = rs;
  79.         right--;
  80.       }
  81.  
  82.     }
  83.     return squares;
  84.   }
  85.  
  86. // Triplet Sum to zero
  87. using namespace std;
  88.  
  89. #include <algorithm>
  90. #include <iostream>
  91. #include <vector>
  92.  
  93. class TripletSumToZero {
  94.  public:
  95.   static vector<vector<int>> searchTriplets(vector<int> &arr) {
  96.     vector<vector<int>> triplets;
  97.     sort(arr.begin(), arr.end());
  98.     if (arr.size() < 3) {
  99.       return triplets;
  100.     }
  101.     for (int i = 0; i < arr.size(); i++) {
  102.       if (arr[i] > 0) { // Found negative number, bail out
  103.         return triplets;
  104.       }
  105.       if (i > 0 && arr[i-1] == arr[i]) { // skip duplicates
  106.         continue;
  107.       }
  108.       searchPair(arr, -arr[i], i + 1, triplets);
  109.     }
  110.     return triplets;
  111.   }
  112.  
  113.  private:
  114.   static void searchPair(vector<int> &arr, int targetSum, int idx, vector<vector<int>> &triplets)
  115.   {
  116.     int left = idx, right = arr.size() - 1;
  117.  
  118.     while (left < right) {
  119.       while (left < right && arr[left - 1] == arr[left]) { //skip duplicates
  120.         left++;
  121.       }
  122.       while (left < right && arr[right + 1] == arr[right]) { //skip duplicates
  123.         right--;
  124.       }
  125.  
  126.       if (arr[left] + arr[right] == targetSum) {
  127.         triplets.push_back({-targetSum, arr[left], arr[right]});
  128.         left++;
  129.         right--;
  130.       } else if (arr[left] + arr[right] < targetSum) {
  131.         left++;
  132.       } else {
  133.         right--;
  134.       }
  135.     }
  136.   }
  137. };
  138.  
  139. // Dutch national Flag probem
  140. class DutchFlag {
  141.  public:
  142.   static void sort(vector<int> &arr) {
  143.     int left = 0, right = arr.size() - 1;
  144.     for (int i = 0; i <= right; ) {
  145.       if (arr[i] == 0) {
  146.         swap(arr, i, left);
  147.         i++;
  148.         left++;
  149.       } else if (arr[i] == 1) {
  150.         i++;
  151.       } else {
  152.         swap(arr, i, right);
  153.         right--;
  154.       }
  155.     }
  156.   }
  157.  
Advertisement
Add Comment
Please, Sign In to add comment