Resources:
GeeksforGeeks
medium
techiedelight.com
leetcodeProblem Explanation
Some Example:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public: | |
vector<int> maxSlidingWindow(vector<int>& nums, int k) { | |
deque<int> dq; | |
vector<int> ans; | |
for (int i = 0; i < (int)nums.size(); i++) { | |
// remove elements out of window | |
if (!dq.empty() && dq.front() == i - k)dq.pop_front(); | |
/// dq is in descending order (invariant) | |
while (!dq.empty() && nums[dq.back()] < nums[i]) | |
dq.pop_back(); | |
/// current element push | |
dq.push_back(i); | |
if (i >= k - 1) | |
ans.push_back(nums[dq.front()]); | |
} | |
return ans; | |
} | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
#define INF 1<<30 | |
#define endl '\n' | |
#define maxn 100005 | |
#define tc printf("Case %d: ", cs) | |
#define tcn printf("Case %d:\n", cs); | |
#define FASTIO ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); | |
typedef long long ll; | |
const double PI = acos(-1.0); | |
#define dbg1(x) cerr << #x << " = " << x << endl; | |
#define dbg2(x, y) cerr << #x << " = " << x << ", " << #y << " = " << y << endl; | |
#define dbg3(x, y, z) cerr << #x << " = " << x << ", " << #y << " = " << y << ", " << #z << " = " << z << endl; | |
#define dbg4(w,x, y, z) cerr << #w << " = " << w << ", " <<#x << " = " << x << ", " << #y << " = " << y << ", " << #z << " = " << z << endl; | |
template < typename F, typename S > | |
ostream& operator << ( ostream& os, const pair< F, S > & p ) { | |
return os << "(" << p.first << ", " << p.second << ")"; | |
} | |
template < typename T > | |
ostream &operator << ( ostream & os, const vector< T > &v ) { | |
os << "{"; | |
for (auto it = v.begin(); it != v.end(); ++it) { | |
if ( it != v.begin() ) os << ", "; | |
os << *it; | |
} | |
return os << "}"; | |
} | |
template < typename T > | |
ostream &operator << ( ostream & os, const set< T > &v ) { | |
os << "["; | |
for (auto it = v.begin(); it != v.end(); ++it) { | |
if ( it != v.begin()) os << ", "; | |
os << *it; | |
} | |
return os << "]"; | |
} | |
template < typename F, typename S > | |
ostream &operator << ( ostream & os, const map< F, S > &v ) { | |
os << "["; | |
for (auto it = v.begin(); it != v.end(); ++it) { | |
if ( it != v.begin() ) os << ", "; | |
os << it -> first << " = " << it -> second ; | |
} | |
return os << "]"; | |
} | |
#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0) | |
clock_t tStart = clock(); | |
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC) | |
void faltu () { cerr << endl; } | |
template <typename T> | |
void faltu( T a[], int n ) { | |
for (int i = 0; i < n; ++i) cerr << a[i] << ' '; | |
cerr << endl; | |
} | |
template <typename T, typename ... hello> | |
void faltu( T arg, const hello &... rest) { cerr << arg << ' '; faltu(rest...); } | |
// Program showing a policy-based data structure. | |
#include <ext/pb_ds/assoc_container.hpp> // Common file | |
#include <ext/pb_ds/tree_policy.hpp> | |
#include <functional> // for less | |
#include <iostream> | |
using namespace __gnu_pbds; | |
using namespace std; | |
// GNU link : https://goo.gl/WVDL6g | |
typedef tree<int, null_type, less_equal<int>, rb_tree_tag, | |
tree_order_statistics_node_update> | |
new_data_set; | |
/**___________________________________________________**/ | |
// Function to find longest substring of given string containing | |
// k distinct characters using sliding window | |
string longestSubstr(string str, int k, int n) | |
{ | |
int End = 0, Begin = 0; | |
unordered_set<char> window; | |
int freq[128] = {0}; | |
for (int l = 0, r = 0; r < n; r++) { | |
window.insert(str[r]); | |
freq[str[r] - 'a']++; | |
while ((int)window.size() > k) { | |
if (--freq[str[l] - 'a'] == 0) | |
window.erase(str[l]); | |
l++; | |
} | |
if (End - Begin < r - l) { | |
End = r; | |
Begin = l; | |
} | |
} | |
return str.substr(Begin, End - Begin + 1); | |
} | |
void findAllanagrams1(string s, string t) | |
{ | |
int n = s.length(); | |
int m = t.length(); | |
if (m > n) return; | |
/// for count current window character | |
unordered_multiset<char> window; | |
// maintain count of character in 2nd string | |
unordered_multiset<char> sec; | |
for (int i = 0; i < (int)t.length(); i++) | |
sec.insert(t[i]); | |
for (int i = 0; i < n; i++) { | |
if (i < m) window.insert(s[i]); | |
else { | |
if (window == sec) { | |
cout << "Angram " << s.substr(i - m, m) << " present at index " << | |
(i - m) << "\n"; | |
} | |
auto it = window.find(s[i - m]); | |
if (it != window.end()) | |
window.erase(it); | |
window.insert(s[i]); | |
} | |
} | |
if (window == sec) { | |
cout << "Angram " << s.substr(n - m, m) << " present at index " << | |
(n - m) << "\n"; | |
} | |
} | |
void findAllanagrams2(string s, string t) | |
{ | |
int n = s.length(); | |
int m = t.length(); | |
if (m > n) return; | |
for (int i = 0; i <= n - m; i++) { | |
if (is_permutation(s.begin() + i, s.begin() + i + m, t.begin())) { | |
cout << "Angram " << s.substr(i, m) << " present at index " << | |
i << "\n"; | |
} | |
} | |
} | |
void longestSubString() | |
{ | |
string str = "abcbdbdbbdcdabd"; | |
int k = 2; | |
int n = str.length(); | |
cout << longestSubstr(str, k, n) << endl; | |
} | |
void allSubstringPermutation() | |
{ | |
string s = "XYYZXZYZXXYZ"; | |
string t = "XYZ"; | |
findAllanagrams1(s, t); | |
cout << "''''''''''''''''''''''\n"; | |
findAllanagrams2(s, t); | |
} | |
int main() | |
{ | |
FASTIO | |
///* | |
#ifndef ONLINE_JUDGE | |
freopen("in.txt", "r", stdin); | |
freopen("out.txt", "w", stdout); | |
freopen("error.txt", "w", stderr); | |
#endif | |
//*/ | |
longestSubString(); | |
allSubstringPermutation(); | |
} |
No comments:
Post a Comment