Skip to content

Commit 1e891c5

Browse files
Add new solutions
1 parent e85d670 commit 1e891c5

File tree

2 files changed

+274
-0
lines changed

2 files changed

+274
-0
lines changed

solutions/design.md

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
# Design and Implementation
2+
3+
## Implement Queue Using Stack
4+
5+
```cpp
6+
class MyQueue {
7+
public:
8+
stack<int> S1, S2;
9+
10+
void push(int x) {
11+
while(S1.size()) {
12+
S2.push(S1.top());
13+
S1.pop();
14+
}
15+
16+
S2.push(x);
17+
18+
while(S2.size()) {
19+
S1.push(S2.top());
20+
S2.pop();
21+
}
22+
}
23+
24+
int pop() {
25+
int x = S1.top();
26+
S1.pop();
27+
return x;
28+
}
29+
30+
int peek() {
31+
return S1.top();
32+
}
33+
34+
bool empty() {
35+
return S1.empty();
36+
}
37+
};
38+
39+
```
40+
41+
## Implement Stack Using Queue
42+
43+
```cpp
44+
class MyStack {
45+
public:
46+
queue<int> q1, q2;
47+
48+
void push(int x) {
49+
q2.push(x);
50+
while(q1.size()) {
51+
q2.push(q1.front());
52+
q1.pop();
53+
}
54+
while(q2.size()) {
55+
q1.push(q2.front());
56+
q2.pop();
57+
}
58+
}
59+
60+
int pop() {
61+
int x = q1.front();
62+
q1.pop();
63+
return x;
64+
}
65+
66+
int top() {
67+
return q1.front();
68+
}
69+
70+
bool empty() {
71+
return q1.empty();
72+
}
73+
};
74+
```
75+
76+
## Stock Price Fluctuation
77+
78+
```cpp
79+
class StockPrice {
80+
map<int, int> m;
81+
multiset<int> s;
82+
public:
83+
StockPrice() {}
84+
void update(int t, int p) {
85+
if (m.count(t)) {
86+
s.erase(s.find(m[t]));
87+
}
88+
m[t] = p;
89+
s.insert(p);
90+
}
91+
int current() {
92+
return m.rbegin()->second;
93+
}
94+
int maximum() {
95+
return *s.rbegin();
96+
}
97+
int minimum() {
98+
return *s.begin();
99+
}
100+
};
101+
```
102+
103+
## Time based Key-Value Store
104+
105+
```cpp
106+
class TimeMap {
107+
public:
108+
unordered_map<string, map<int, string, greater<>>> M;
109+
110+
void set(string key, string value, int timestamp) {
111+
M[key][timestamp] = value;
112+
}
113+
114+
string get(string key, int timestamp) {
115+
if (M.count(key) == 0) return "";
116+
auto it = M[key].lower_bound(timestamp);
117+
if(it == M[key].end()) {
118+
return "";
119+
} else {
120+
return it->second;
121+
}
122+
}
123+
};
124+
125+
```
126+
127+
## Design Circular Queue
128+
129+
```cpp
130+
class MyCircularQueue {
131+
private:
132+
vector<int> v;
133+
int start = 0, len = 0;
134+
public:
135+
MyCircularQueue(int k): v(k) {}
136+
bool enQueue(int value) {
137+
if (isFull()) return false;
138+
v[(start + len++) % v.size()] = value;
139+
return true;
140+
}
141+
bool deQueue() {
142+
if (isEmpty()) return false;
143+
start = (start + 1) % v.size();
144+
--len;
145+
return true;
146+
}
147+
int Front() {
148+
if (isEmpty()) return -1;
149+
return v[start];
150+
}
151+
int Rear() {
152+
if (isEmpty()) return -1;
153+
return v[(start + len - 1) % v.size()];
154+
}
155+
bool isEmpty() {
156+
return !len;
157+
}
158+
bool isFull() {
159+
return len == v.size();
160+
}
161+
};
162+
```

solutions/sliding-window.md

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# Sliding Window
2+
3+
## Longest Substring Without Repeating Characters
4+
5+
```cpp
6+
int lengthOfLongestSubstring(string s) {
7+
int N = s.length();
8+
int ans = 0, i = 0;
9+
10+
unordered_map<char, int> M;
11+
12+
for(int j = 0; j < N; j++) {
13+
14+
M[s[j]]++;
15+
16+
// Window size increases from left side.
17+
while(M[s[j]] > 1) {
18+
M[s[i++]]--;
19+
}
20+
21+
ans = max(ans, j - i + 1);
22+
}
23+
24+
return ans;
25+
}
26+
```
27+
28+
## Minimum Size Subarray Sum
29+
30+
```cpp
31+
int minSubArrayLen(int target, vector<int>& nums) {
32+
int N = nums.size();
33+
int sum = 0, ans = N + 1, i = 0;
34+
35+
for(int j = 0; j < N; j++) {
36+
37+
sum += nums[j];
38+
39+
while(sum >= target) {
40+
ans = min(ans, j - i + 1);
41+
sum -= nums[i++];
42+
}
43+
}
44+
45+
return ans == N + 1 ? 0 : ans;
46+
}
47+
```
48+
49+
## Number of Smooth Descent Periods of a Stock
50+
51+
```cpp
52+
long long getDescentPeriods(vector<int>& prices) {
53+
long long ans = 0;
54+
int i = 0, N = prices.size();
55+
56+
for(int j = 0; j < N; j++) {
57+
58+
if(j && prices[j] + 1 != prices[j - 1]) {
59+
i = j;
60+
}
61+
62+
ans += (j - i + 1);
63+
}
64+
65+
return ans;
66+
}
67+
```
68+
69+
## Frequency of Most Frequent Element
70+
71+
```cpp
72+
int maxFrequency(vector<int>& A, int k) {
73+
sort(A.begin(), A.end());
74+
int N = A.size();
75+
76+
long long i = 0, sum = 0, ans = 0;
77+
78+
for(int j = 0; j < N; j++) {
79+
sum += A[j];
80+
81+
// Increase the windows size when our total sum - sum of window > k
82+
while((A[j] * (j - i + 1) - sum) > k ) {
83+
sum -= A[i++];
84+
}
85+
86+
// If our window is valid, we can perform less than or equal to k operations.
87+
ans = max(ans, j - i + 1);
88+
}
89+
90+
return ans;
91+
}
92+
```
93+
94+
## Max Consecutive Ones III
95+
96+
```cpp
97+
int longestOnes(vector<int>& nums, int k) {
98+
int N = nums.size();
99+
int length = 0, i = 0, sum = 0;
100+
101+
for(int j = 0; j < N; j++) {
102+
sum += nums[j];
103+
while(((j - i + 1) - sum) > k) {
104+
sum -= nums[i++];
105+
}
106+
107+
length = max(length, j - i + 1);
108+
}
109+
110+
return length;
111+
}
112+
```

0 commit comments

Comments
 (0)