Skip to content

Commit 9486a69

Browse files
committed
feat: add ts solution to lc problems
- No.0636.Exclusive Time of Functions - No.2367.Number of Arithmetic Triplets - No.2368.Reachable Nodes With Restrictions - No.2369.Check if There is a Valid Partition For The Array - No.2370.Longest Ideal Subsequence
1 parent b4b82fb commit 9486a69

File tree

15 files changed

+341
-5
lines changed

15 files changed

+341
-5
lines changed

solution/0600-0699/0636.Exclusive Time of Functions/README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,36 @@
106106

107107
```
108108

109+
### **TypeScript**
110+
111+
```ts
112+
function exclusiveTime(n: number, logs: string[]): number[] {
113+
const res = new Array(n).fill(0);
114+
const stack: [number, number][] = [];
115+
116+
for (const log of logs) {
117+
const t = log.split(':');
118+
const [id, state, time] = [Number(t[0]), t[1], Number(t[2])];
119+
120+
if (state === 'start') {
121+
if (stack.length !== 0) {
122+
const pre = stack[stack.length - 1];
123+
res[pre[0]] += time - pre[1];
124+
}
125+
stack.push([id, time]);
126+
} else {
127+
const pre = stack.pop();
128+
res[pre[0]] += time - pre[1] + 1;
129+
if (stack.length !== 0) {
130+
stack[stack.length - 1][1] = time + 1;
131+
}
132+
}
133+
}
134+
135+
return res;
136+
}
137+
```
138+
109139
### **...**
110140

111141
```

solution/0600-0699/0636.Exclusive Time of Functions/README_EN.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,36 @@ So function 0 spends 2 + 4 + 1 = 7 units of total time executing, and function 1
8484

8585
```
8686

87+
### **TypeScript**
88+
89+
```ts
90+
function exclusiveTime(n: number, logs: string[]): number[] {
91+
const res = new Array(n).fill(0);
92+
const stack: [number, number][] = [];
93+
94+
for (const log of logs) {
95+
const t = log.split(':');
96+
const [id, state, time] = [Number(t[0]), t[1], Number(t[2])];
97+
98+
if (state === 'start') {
99+
if (stack.length !== 0) {
100+
const pre = stack[stack.length - 1];
101+
res[pre[0]] += time - pre[1];
102+
}
103+
stack.push([id, time]);
104+
} else {
105+
const pre = stack.pop();
106+
res[pre[0]] += time - pre[1] + 1;
107+
if (stack.length !== 0) {
108+
stack[stack.length - 1][1] = time + 1;
109+
}
110+
}
111+
}
112+
113+
return res;
114+
}
115+
```
116+
87117
### **...**
88118

89119
```
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
function exclusiveTime(n: number, logs: string[]): number[] {
2+
const res = new Array(n).fill(0);
3+
const stack: [number, number][] = [];
4+
5+
for (const log of logs) {
6+
const t = log.split(':');
7+
const [id, state, time] = [Number(t[0]), t[1], Number(t[2])];
8+
9+
if (state === 'start') {
10+
if (stack.length !== 0) {
11+
const pre = stack[stack.length - 1];
12+
res[pre[0]] += time - pre[1];
13+
}
14+
stack.push([id, time]);
15+
} else {
16+
const pre = stack.pop();
17+
res[pre[0]] += time - pre[1] + 1;
18+
if (stack.length !== 0) {
19+
stack[stack.length - 1][1] = time + 1;
20+
}
21+
}
22+
}
23+
24+
return res;
25+
}

solution/2300-2399/2367.Number of Arithmetic Triplets/README.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,23 @@ func arithmeticTriplets(nums []int, diff int) int {
140140
### **TypeScript**
141141

142142
```ts
143-
143+
function arithmeticTriplets(nums: number[], diff: number): number {
144+
let res = 0;
145+
const n = nums.length;
146+
for (let i = 0; i < n - 2; i++) {
147+
for (let j = i + 1; j < n - 1; j++) {
148+
for (let k = j + 1; k < n; k++) {
149+
if (nums[k] - nums[j] > diff) {
150+
break;
151+
}
152+
if (nums[j] - nums[i] === diff && nums[k] - nums[j] === diff) {
153+
res++;
154+
}
155+
}
156+
}
157+
}
158+
return res;
159+
}
144160
```
145161

146162
### **...**

solution/2300-2399/2367.Number of Arithmetic Triplets/README_EN.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,23 @@ func arithmeticTriplets(nums []int, diff int) int {
130130
### **TypeScript**
131131

132132
```ts
133-
133+
function arithmeticTriplets(nums: number[], diff: number): number {
134+
let res = 0;
135+
const n = nums.length;
136+
for (let i = 0; i < n - 2; i++) {
137+
for (let j = i + 1; j < n - 1; j++) {
138+
for (let k = j + 1; k < n; k++) {
139+
if (nums[k] - nums[j] > diff) {
140+
break;
141+
}
142+
if (nums[j] - nums[i] === diff && nums[k] - nums[j] === diff) {
143+
res++;
144+
}
145+
}
146+
}
147+
}
148+
return res;
149+
}
134150
```
135151

136152
### **...**
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
function arithmeticTriplets(nums: number[], diff: number): number {
2+
let res = 0;
3+
const n = nums.length;
4+
for (let i = 0; i < n - 2; i++) {
5+
for (let j = i + 1; j < n - 1; j++) {
6+
for (let k = j + 1; k < n; k++) {
7+
if (nums[k] - nums[j] > diff) {
8+
break;
9+
}
10+
if (nums[j] - nums[i] === diff && nums[k] - nums[j] === diff) {
11+
res++;
12+
}
13+
}
14+
}
15+
}
16+
return res;
17+
}

solution/2300-2399/2368.Reachable Nodes With Restrictions/README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,32 @@ func reachableNodes(n int, edges [][]int, restricted []int) int {
193193
### **TypeScript**
194194

195195
```ts
196+
function reachableNodes(
197+
n: number,
198+
edges: number[][],
199+
restricted: number[],
200+
): number {
201+
let res = 0;
202+
const vis = new Array(n).fill(false);
203+
const map = new Map<number, number[]>();
204+
for (const [start, end] of edges) {
205+
map.set(start, [...(map.get(start) ?? []), end]);
206+
map.set(end, [...(map.get(end) ?? []), start]);
207+
}
208+
const dfs = (cur: number) => {
209+
if (restricted.includes(cur) || vis[cur]) {
210+
return;
211+
}
212+
res++;
213+
vis[cur] = true;
214+
for (const item of map.get(cur) ?? []) {
215+
dfs(item);
216+
}
217+
};
218+
dfs(0);
196219

220+
return res;
221+
}
197222
```
198223

199224
### **...**

solution/2300-2399/2368.Reachable Nodes With Restrictions/README_EN.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,32 @@ func reachableNodes(n int, edges [][]int, restricted []int) int {
184184
### **TypeScript**
185185

186186
```ts
187+
function reachableNodes(
188+
n: number,
189+
edges: number[][],
190+
restricted: number[],
191+
): number {
192+
let res = 0;
193+
const vis = new Array(n).fill(false);
194+
const map = new Map<number, number[]>();
195+
for (const [start, end] of edges) {
196+
map.set(start, [...(map.get(start) ?? []), end]);
197+
map.set(end, [...(map.get(end) ?? []), start]);
198+
}
199+
const dfs = (cur: number) => {
200+
if (restricted.includes(cur) || vis[cur]) {
201+
return;
202+
}
203+
res++;
204+
vis[cur] = true;
205+
for (const item of map.get(cur) ?? []) {
206+
dfs(item);
207+
}
208+
};
209+
dfs(0);
187210

211+
return res;
212+
}
188213
```
189214

190215
### **...**
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
function reachableNodes(
2+
n: number,
3+
edges: number[][],
4+
restricted: number[],
5+
): number {
6+
let res = 0;
7+
const vis = new Array(n).fill(false);
8+
const map = new Map<number, number[]>();
9+
for (const [start, end] of edges) {
10+
map.set(start, [...(map.get(start) ?? []), end]);
11+
map.set(end, [...(map.get(end) ?? []), start]);
12+
}
13+
const dfs = (cur: number) => {
14+
if (restricted.includes(cur) || vis[cur]) {
15+
return;
16+
}
17+
res++;
18+
vis[cur] = true;
19+
for (const item of map.get(cur) ?? []) {
20+
dfs(item);
21+
}
22+
};
23+
dfs(0);
24+
25+
return res;
26+
}

solution/2300-2399/2369.Check if There is a Valid Partition For The Array/README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,35 @@ func validPartition(nums []int) bool {
189189
### **TypeScript**
190190

191191
```ts
192+
function validPartition(nums: number[]): boolean {
193+
const n = nums.length;
194+
const vis = new Array(n).fill(false);
195+
const queue = [0];
196+
while (queue.length !== 0) {
197+
const i = queue.shift() ?? 0;
198+
199+
if (i === n) {
200+
return true;
201+
}
202+
203+
if (!vis[i + 2] && i + 2 <= n && nums[i] === nums[i + 1]) {
204+
queue.push(i + 2);
205+
vis[i + 2] = true;
206+
}
192207

208+
if (
209+
!vis[i + 3] &&
210+
i + 3 <= n &&
211+
((nums[i] === nums[i + 1] && nums[i + 1] === nums[i + 2]) ||
212+
(nums[i] === nums[i + 1] - 1 &&
213+
nums[i + 1] === nums[i + 2] - 1))
214+
) {
215+
queue.push(i + 3);
216+
vis[i + 3] = true;
217+
}
218+
}
219+
return false;
220+
}
193221
```
194222

195223
### **...**

0 commit comments

Comments
 (0)