File tree Expand file tree Collapse file tree 4 files changed +121
-12
lines changed
solution/2300-2399/2360.Longest Cycle in a Graph Expand file tree Collapse file tree 4 files changed +121
-12
lines changed Original file line number Diff line number Diff line change @@ -208,23 +208,23 @@ func longestCycle(edges []int) int {
208
208
``` ts
209
209
function longestCycle(edges : number []): number {
210
210
const n = edges .length ;
211
- const vis = new Array (n ).fill (false );
211
+ const vis: boolean [] = Array (n ).fill (false );
212
212
let ans = - 1 ;
213
213
for (let i = 0 ; i < n ; ++ i ) {
214
214
if (vis [i ]) {
215
215
continue ;
216
216
}
217
217
let j = i ;
218
218
const cycle: number [] = [];
219
- for (; j != - 1 && ! vis [j ]; j = edges [j ]) {
219
+ for (; j !== - 1 && ! vis [j ]; j = edges [j ]) {
220
220
vis [j ] = true ;
221
221
cycle .push (j );
222
222
}
223
- if (j == - 1 ) {
223
+ if (j === - 1 ) {
224
224
continue ;
225
225
}
226
226
for (let k = 0 ; k < cycle .length ; ++ k ) {
227
- if (cycle [k ] == j ) {
227
+ if (cycle [k ] === j ) {
228
228
ans = Math .max (ans , cycle .length - k );
229
229
break ;
230
230
}
@@ -234,6 +234,44 @@ function longestCycle(edges: number[]): number {
234
234
}
235
235
```
236
236
237
+ #### Rust
238
+
239
+ ``` rust
240
+ impl Solution {
241
+ pub fn longest_cycle (edges : Vec <i32 >) -> i32 {
242
+ let n = edges . len ();
243
+ let mut vis = vec! [false ; n ];
244
+ let mut ans = - 1 ;
245
+
246
+ for i in 0 .. n {
247
+ if vis [i ] {
248
+ continue ;
249
+ }
250
+ let mut j = i as i32 ;
251
+ let mut cycle = Vec :: new ();
252
+
253
+ while j != - 1 && ! vis [j as usize ] {
254
+ vis [j as usize ] = true ;
255
+ cycle . push (j );
256
+ j = edges [j as usize ];
257
+ }
258
+
259
+ if j == - 1 {
260
+ continue ;
261
+ }
262
+
263
+ for k in 0 .. cycle . len () {
264
+ if cycle [k ] == j {
265
+ ans = ans . max ((cycle . len () - k ) as i32 );
266
+ break ;
267
+ }
268
+ }
269
+ }
270
+ ans
271
+ }
272
+ }
273
+ ```
274
+
237
275
<!-- tabs: end -->
238
276
239
277
<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -202,23 +202,23 @@ func longestCycle(edges []int) int {
202
202
``` ts
203
203
function longestCycle(edges : number []): number {
204
204
const n = edges .length ;
205
- const vis = new Array (n ).fill (false );
205
+ const vis: boolean [] = Array (n ).fill (false );
206
206
let ans = - 1 ;
207
207
for (let i = 0 ; i < n ; ++ i ) {
208
208
if (vis [i ]) {
209
209
continue ;
210
210
}
211
211
let j = i ;
212
212
const cycle: number [] = [];
213
- for (; j != - 1 && ! vis [j ]; j = edges [j ]) {
213
+ for (; j !== - 1 && ! vis [j ]; j = edges [j ]) {
214
214
vis [j ] = true ;
215
215
cycle .push (j );
216
216
}
217
- if (j == - 1 ) {
217
+ if (j === - 1 ) {
218
218
continue ;
219
219
}
220
220
for (let k = 0 ; k < cycle .length ; ++ k ) {
221
- if (cycle [k ] == j ) {
221
+ if (cycle [k ] === j ) {
222
222
ans = Math .max (ans , cycle .length - k );
223
223
break ;
224
224
}
@@ -228,6 +228,44 @@ function longestCycle(edges: number[]): number {
228
228
}
229
229
```
230
230
231
+ #### Rust
232
+
233
+ ``` rust
234
+ impl Solution {
235
+ pub fn longest_cycle (edges : Vec <i32 >) -> i32 {
236
+ let n = edges . len ();
237
+ let mut vis = vec! [false ; n ];
238
+ let mut ans = - 1 ;
239
+
240
+ for i in 0 .. n {
241
+ if vis [i ] {
242
+ continue ;
243
+ }
244
+ let mut j = i as i32 ;
245
+ let mut cycle = Vec :: new ();
246
+
247
+ while j != - 1 && ! vis [j as usize ] {
248
+ vis [j as usize ] = true ;
249
+ cycle . push (j );
250
+ j = edges [j as usize ];
251
+ }
252
+
253
+ if j == - 1 {
254
+ continue ;
255
+ }
256
+
257
+ for k in 0 .. cycle . len () {
258
+ if cycle [k ] == j {
259
+ ans = ans . max ((cycle . len () - k ) as i32 );
260
+ break ;
261
+ }
262
+ }
263
+ }
264
+ ans
265
+ }
266
+ }
267
+ ```
268
+
231
269
<!-- tabs: end -->
232
270
233
271
<!-- solution: end -->
Original file line number Diff line number Diff line change
1
+ impl Solution {
2
+ pub fn longest_cycle ( edges : Vec < i32 > ) -> i32 {
3
+ let n = edges. len ( ) ;
4
+ let mut vis = vec ! [ false ; n] ;
5
+ let mut ans = -1 ;
6
+
7
+ for i in 0 ..n {
8
+ if vis[ i] {
9
+ continue ;
10
+ }
11
+ let mut j = i as i32 ;
12
+ let mut cycle = Vec :: new ( ) ;
13
+
14
+ while j != -1 && !vis[ j as usize ] {
15
+ vis[ j as usize ] = true ;
16
+ cycle. push ( j) ;
17
+ j = edges[ j as usize ] ;
18
+ }
19
+
20
+ if j == -1 {
21
+ continue ;
22
+ }
23
+
24
+ for k in 0 ..cycle. len ( ) {
25
+ if cycle[ k] == j {
26
+ ans = ans. max ( ( cycle. len ( ) - k) as i32 ) ;
27
+ break ;
28
+ }
29
+ }
30
+ }
31
+ ans
32
+ }
33
+ }
Original file line number Diff line number Diff line change 1
1
function longestCycle ( edges : number [ ] ) : number {
2
2
const n = edges . length ;
3
- const vis = new Array ( n ) . fill ( false ) ;
3
+ const vis : boolean [ ] = Array ( n ) . fill ( false ) ;
4
4
let ans = - 1 ;
5
5
for ( let i = 0 ; i < n ; ++ i ) {
6
6
if ( vis [ i ] ) {
7
7
continue ;
8
8
}
9
9
let j = i ;
10
10
const cycle : number [ ] = [ ] ;
11
- for ( ; j != - 1 && ! vis [ j ] ; j = edges [ j ] ) {
11
+ for ( ; j !== - 1 && ! vis [ j ] ; j = edges [ j ] ) {
12
12
vis [ j ] = true ;
13
13
cycle . push ( j ) ;
14
14
}
15
- if ( j == - 1 ) {
15
+ if ( j === - 1 ) {
16
16
continue ;
17
17
}
18
18
for ( let k = 0 ; k < cycle . length ; ++ k ) {
19
- if ( cycle [ k ] == j ) {
19
+ if ( cycle [ k ] === j ) {
20
20
ans = Math . max ( ans , cycle . length - k ) ;
21
21
break ;
22
22
}
You can’t perform that action at this time.
0 commit comments