Skip to content

Commit 3585d12

Browse files
authored
Sri Hari: Batch-5/Neetcode-ALL/Develop-articles (#3836)
* Batch-5/Neetcode-ALL/Added-articles * Batch-5/Neetcode-ALL/Added-articles * Batch-5/Neetcode-ALL/Added-articles * Batch-5/Neetcode-ALL/Added-articles * Batch-5/Neetcode-ALL/Added-articles
1 parent af30f2f commit 3585d12

20 files changed

+12235
-0
lines changed

articles/as-far-from-land-as-possible.md

Lines changed: 757 additions & 0 deletions
Large diffs are not rendered by default.

articles/convert-bst-to-greater-tree.md

Lines changed: 643 additions & 0 deletions
Large diffs are not rendered by default.

articles/design-linked-list.md

Lines changed: 1262 additions & 0 deletions
Large diffs are not rendered by default.

articles/even-odd-tree.md

Lines changed: 543 additions & 0 deletions
Large diffs are not rendered by default.

articles/find-bottom-left-tree-value.md

Lines changed: 633 additions & 0 deletions
Large diffs are not rendered by default.

articles/find-largest-value-in-each-tree-row.md

Lines changed: 462 additions & 0 deletions
Large diffs are not rendered by default.

articles/flip-equivalent-binary-trees.md

Lines changed: 492 additions & 0 deletions
Large diffs are not rendered by default.

articles/insertion-sort-list.md

Lines changed: 411 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 299 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,299 @@
1+
## 1. Depth First Search
2+
3+
::tabs-start
4+
5+
```python
6+
class Solution:
7+
def minimumFuelCost(self, roads: list[list[int]], seats: int) -> int:
8+
adj = defaultdict(list)
9+
for src, dst in roads:
10+
adj[src].append(dst)
11+
adj[dst].append(src)
12+
13+
res = 0
14+
def dfs(node, parent):
15+
nonlocal res
16+
passengers = 0
17+
for child in adj[node]:
18+
if child != parent:
19+
p = dfs(child, node)
20+
passengers += p
21+
res += ceil(p / seats)
22+
return passengers + 1
23+
24+
dfs(0, -1)
25+
return res
26+
```
27+
28+
```java
29+
public class Solution {
30+
private List<Integer>[] adj;
31+
private long res = 0;
32+
33+
public long minimumFuelCost(int[][] roads, int seats) {
34+
int n = roads.length + 1;
35+
adj = new ArrayList[n];
36+
37+
for (int i = 0; i < n; i++) {
38+
adj[i] = new ArrayList<>();
39+
}
40+
41+
for (int[] road : roads) {
42+
adj[road[0]].add(road[1]);
43+
adj[road[1]].add(road[0]);
44+
}
45+
46+
dfs(0, -1, seats);
47+
return res;
48+
}
49+
50+
private int dfs(int node, int parent, int seats) {
51+
int passengers = 0;
52+
for (int child : adj[node]) {
53+
if (child != parent) {
54+
int p = dfs(child, node, seats);
55+
passengers += p;
56+
res += Math.ceil((double) p / seats);
57+
}
58+
}
59+
return passengers + 1;
60+
}
61+
}
62+
```
63+
64+
```cpp
65+
class Solution {
66+
private:
67+
vector<vector<int>> adj;
68+
long long res = 0;
69+
70+
public:
71+
long long minimumFuelCost(vector<vector<int>>& roads, int seats) {
72+
int n = roads.size() + 1;
73+
adj.resize(n);
74+
75+
for (auto& road : roads) {
76+
adj[road[0]].push_back(road[1]);
77+
adj[road[1]].push_back(road[0]);
78+
}
79+
80+
dfs(0, -1, seats);
81+
return res;
82+
}
83+
84+
private:
85+
int dfs(int node, int parent, int seats) {
86+
int passengers = 0;
87+
for (int child : adj[node]) {
88+
if (child != parent) {
89+
int p = dfs(child, node, seats);
90+
passengers += p;
91+
res += ceil((double) p / seats);
92+
}
93+
}
94+
return passengers + 1;
95+
}
96+
};
97+
```
98+
99+
```javascript
100+
class Solution {
101+
/**
102+
* @param {number[][]} roads
103+
* @param {number} seats
104+
* @return {number}
105+
*/
106+
minimumFuelCost(roads, seats) {
107+
const n = roads.length + 1;
108+
const adj = Array.from({ length: n }, () => []);
109+
let res = 0;
110+
111+
for (const [src, dst] of roads) {
112+
adj[src].push(dst);
113+
adj[dst].push(src);
114+
}
115+
116+
const dfs = (node, parent) => {
117+
let passengers = 0;
118+
for (const child of adj[node]) {
119+
if (child !== parent) {
120+
let p = dfs(child, node);
121+
passengers += p;
122+
res += Math.ceil(p / seats);
123+
}
124+
}
125+
return passengers + 1;
126+
};
127+
128+
dfs(0, -1);
129+
return res;
130+
}
131+
}
132+
```
133+
134+
::tabs-end
135+
136+
### Time & Space Complexity
137+
138+
* Time complexity: $O(n)$
139+
* Space complexity: $O(n)$
140+
141+
---
142+
143+
## 2. Topological Sort (Kahn's Algorithm)
144+
145+
::tabs-start
146+
147+
```python
148+
class Solution:
149+
def minimumFuelCost(self, roads: list[list[int]], seats: int) -> int:
150+
n = len(roads) + 1
151+
adj = [[] for _ in range(n)]
152+
indegree = [0] * n
153+
passengers = [1] * n
154+
res = 0
155+
156+
for src, dst in roads:
157+
adj[src].append(dst)
158+
adj[dst].append(src)
159+
indegree[src] += 1
160+
indegree[dst] += 1
161+
162+
q = deque()
163+
for i in range(1, n):
164+
if indegree[i] == 1:
165+
q.append(i)
166+
167+
while q:
168+
node = q.popleft()
169+
res += math.ceil(passengers[node] / seats)
170+
for parent in adj[node]:
171+
indegree[parent] -= 1
172+
if indegree[parent] == 1 and parent != 0:
173+
q.append(parent)
174+
passengers[parent] += passengers[node]
175+
176+
return res
177+
```
178+
179+
```java
180+
public class Solution {
181+
public long minimumFuelCost(int[][] roads, int seats) {
182+
int n = roads.length + 1;
183+
List<Integer>[] adj = new ArrayList[n];
184+
int[] indegree = new int[n];
185+
int[] passengers = new int[n];
186+
Arrays.fill(passengers, 1);
187+
long res = 0;
188+
189+
for (int i = 0; i < n; i++) adj[i] = new ArrayList<>();
190+
191+
for (int[] road : roads) {
192+
int src = road[0], dst = road[1];
193+
adj[src].add(dst);
194+
adj[dst].add(src);
195+
indegree[src]++;
196+
indegree[dst]++;
197+
}
198+
199+
Queue<Integer> q = new LinkedList<>();
200+
for (int i = 1; i < n; i++) {
201+
if (indegree[i] == 1) q.offer(i);
202+
}
203+
204+
while (!q.isEmpty()) {
205+
int node = q.poll();
206+
res += (int) Math.ceil((double) passengers[node] / seats);
207+
for (int parent : adj[node]) {
208+
if (--indegree[parent] == 1 && parent != 0) q.offer(parent);
209+
passengers[parent] += passengers[node];
210+
}
211+
}
212+
213+
return res;
214+
}
215+
}
216+
```
217+
218+
```cpp
219+
class Solution {
220+
public:
221+
long long minimumFuelCost(vector<vector<int>>& roads, int seats) {
222+
int n = roads.size() + 1;
223+
vector<vector<int>> adj(n);
224+
vector<int> indegree(n, 0), passengers(n, 1);
225+
long long res = 0;
226+
227+
for (auto& road : roads) {
228+
int src = road[0], dst = road[1];
229+
adj[src].push_back(dst);
230+
adj[dst].push_back(src);
231+
indegree[src]++;
232+
indegree[dst]++;
233+
}
234+
235+
queue<int> q;
236+
for (int i = 1; i < n; i++) {
237+
if (indegree[i] == 1) q.push(i);
238+
}
239+
240+
while (!q.empty()) {
241+
int node = q.front();q.pop();
242+
res += ceil((double) passengers[node] / seats);
243+
for (int parent : adj[node]) {
244+
if (--indegree[parent] == 1 && parent != 0) q.push(parent);
245+
passengers[parent] += passengers[node];
246+
}
247+
}
248+
249+
return res;
250+
}
251+
};
252+
```
253+
254+
```javascript
255+
class Solution {
256+
/**
257+
* @param {number[][]} roads
258+
* @param {number} seats
259+
* @return {number}
260+
*/
261+
minimumFuelCost(roads, seats) {
262+
const n = roads.length + 1;
263+
const adj = Array.from({ length: n }, () => []);
264+
const indegree = new Array(n).fill(0);
265+
const passengers = new Array(n).fill(1);
266+
let res = 0;
267+
268+
for (const [src, dst] of roads) {
269+
adj[src].push(dst);
270+
adj[dst].push(src);
271+
indegree[src] += 1;
272+
indegree[dst] += 1;
273+
}
274+
275+
const q = new Queue();
276+
for (let i = 1; i < n; i++) {
277+
if (indegree[i] === 1) q.push(i);
278+
}
279+
280+
while (!q.isEmpty()) {
281+
const node = q.pop();
282+
res += Math.ceil(passengers[node] / seats);
283+
for (const parent of adj[node]) {
284+
if (--indegree[parent] === 1 && parent !== 0) q.push(parent);
285+
passengers[parent] += passengers[node];
286+
}
287+
}
288+
289+
return res;
290+
}
291+
}
292+
```
293+
294+
::tabs-end
295+
296+
### Time & Space Complexity
297+
298+
* Time complexity: $O(n)$
299+
* Space complexity: $O(n)$

0 commit comments

Comments
 (0)