Skip to content

Commit a136e22

Browse files
committed
feat: add solutions to lc problem: No.0565
No.0565.Array Nesting
1 parent 00c86ae commit a136e22

File tree

6 files changed

+256
-4
lines changed

6 files changed

+256
-4
lines changed

solution/0500-0599/0565.Array Nesting/README.md

+90-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
<pre><strong>输入:</strong> A = [5,4,0,3,1,6,2]
1818
<strong>输出:</strong> 4
19-
<strong>解释:</strong>
19+
<strong>解释:</strong>
2020
A[0] = 5, A[1] = 4, A[2] = 0, A[3] = 3, A[4] = 1, A[5] = 6, A[6] = 2.
2121

2222
其中一种最长的 S[K]:
@@ -37,22 +37,110 @@ S[0] = {A[0], A[5], A[6], A[2]} = {5, 6, 2, 0}
3737

3838
<!-- 这里可写通用的实现逻辑 -->
3939

40+
嵌套数组最终一定会形成一个环,在枚举 `S[i]` 的过程中,可以用 `vis` 数组剪枝,避免重复枚举同一个环
41+
4042
<!-- tabs:start -->
4143

4244
### **Python3**
4345

4446
<!-- 这里可写当前语言的特殊实现逻辑 -->
4547

4648
```python
47-
49+
class Solution:
50+
def arrayNesting(self, nums: List[int]) -> int:
51+
n = len(nums)
52+
vis = [False] * n
53+
res = 0
54+
for i in range(n):
55+
if vis[i]:
56+
continue
57+
cur, m = nums[i], 1
58+
vis[cur] = True
59+
while nums[cur] != nums[i]:
60+
cur = nums[cur]
61+
m += 1
62+
vis[cur] = True
63+
res = max(res, m)
64+
return res
4865
```
4966

5067
### **Java**
5168

5269
<!-- 这里可写当前语言的特殊实现逻辑 -->
5370

5471
```java
72+
class Solution {
73+
public int arrayNesting(int[] nums) {
74+
int n = nums.length;
75+
boolean[] vis = new boolean[n];
76+
int res = 0;
77+
for (int i = 0; i < n; i++) {
78+
if (vis[i]) {
79+
continue;
80+
}
81+
int cur = nums[i], m = 1;
82+
vis[cur] = true;
83+
while (nums[cur] != nums[i]) {
84+
cur = nums[cur];
85+
m++;
86+
vis[cur] = true;
87+
}
88+
res = Math.max(res, m);
89+
}
90+
return res;
91+
}
92+
}
93+
```
94+
95+
### **C++**
96+
97+
```cpp
98+
class Solution {
99+
public:
100+
int arrayNesting(vector<int>& nums) {
101+
int n = nums.size();
102+
vector<bool> vis(n);
103+
int res = 0;
104+
for (int i = 0; i < n; ++i) {
105+
if (vis[i]) continue;
106+
int cur = nums[i], m = 1;
107+
vis[cur] = true;
108+
while (nums[cur] != nums[i]) {
109+
cur = nums[cur];
110+
++m;
111+
vis[cur] = true;
112+
}
113+
res = max(res, m);
114+
}
115+
return res;
116+
}
117+
};
118+
```
55119
120+
### **Go**
121+
122+
```go
123+
func arrayNesting(nums []int) int {
124+
n := len(nums)
125+
vis := make([]bool, n)
126+
ans := 0
127+
for i := 0; i < n; i++ {
128+
if vis[i] {
129+
continue
130+
}
131+
cur, m := nums[i], 1
132+
vis[cur] = true
133+
for nums[cur] != nums[i] {
134+
cur = nums[cur]
135+
m++
136+
vis[cur] = true
137+
}
138+
if m > ans {
139+
ans = m
140+
}
141+
}
142+
return ans
143+
}
56144
```
57145

58146
### **...**

solution/0500-0599/0565.Array Nesting/README_EN.md

+88-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<pre>
2323
<strong>Input:</strong> nums = [5,4,0,3,1,6,2]
2424
<strong>Output:</strong> 4
25-
<strong>Explanation:</strong>
25+
<strong>Explanation:</strong>
2626
nums[0] = 5, nums[1] = 4, nums[2] = 0, nums[3] = 3, nums[4] = 1, nums[5] = 6, nums[6] = 2.
2727
One of the longest sets s[k]:
2828
s[0] = {nums[0], nums[5], nums[6], nums[2]} = {5, 6, 2, 0}
@@ -51,13 +51,99 @@ s[0] = {nums[0], nums[5], nums[6], nums[2]} = {5, 6, 2, 0}
5151
### **Python3**
5252

5353
```python
54-
54+
class Solution:
55+
def arrayNesting(self, nums: List[int]) -> int:
56+
n = len(nums)
57+
vis = [False] * n
58+
res = 0
59+
for i in range(n):
60+
if vis[i]:
61+
continue
62+
cur, m = nums[i], 1
63+
vis[cur] = True
64+
while nums[cur] != nums[i]:
65+
cur = nums[cur]
66+
m += 1
67+
vis[cur] = True
68+
res = max(res, m)
69+
return res
5570
```
5671

5772
### **Java**
5873

5974
```java
75+
class Solution {
76+
public int arrayNesting(int[] nums) {
77+
int n = nums.length;
78+
boolean[] vis = new boolean[n];
79+
int res = 0;
80+
for (int i = 0; i < n; i++) {
81+
if (vis[i]) {
82+
continue;
83+
}
84+
int cur = nums[i], m = 1;
85+
vis[cur] = true;
86+
while (nums[cur] != nums[i]) {
87+
cur = nums[cur];
88+
m++;
89+
vis[cur] = true;
90+
}
91+
res = Math.max(res, m);
92+
}
93+
return res;
94+
}
95+
}
96+
```
97+
98+
### **C++**
99+
100+
```cpp
101+
class Solution {
102+
public:
103+
int arrayNesting(vector<int>& nums) {
104+
int n = nums.size();
105+
vector<bool> vis(n);
106+
int res = 0;
107+
for (int i = 0; i < n; ++i) {
108+
if (vis[i]) continue;
109+
int cur = nums[i], m = 1;
110+
vis[cur] = true;
111+
while (nums[cur] != nums[i]) {
112+
cur = nums[cur];
113+
++m;
114+
vis[cur] = true;
115+
}
116+
res = max(res, m);
117+
}
118+
return res;
119+
}
120+
};
121+
```
60122
123+
### **Go**
124+
125+
```go
126+
func arrayNesting(nums []int) int {
127+
n := len(nums)
128+
vis := make([]bool, n)
129+
ans := 0
130+
for i := 0; i < n; i++ {
131+
if vis[i] {
132+
continue
133+
}
134+
cur, m := nums[i], 1
135+
vis[cur] = true
136+
for nums[cur] != nums[i] {
137+
cur = nums[cur]
138+
m++
139+
vis[cur] = true
140+
}
141+
if m > ans {
142+
ans = m
143+
}
144+
}
145+
return ans
146+
}
61147
```
62148

63149
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
int arrayNesting(vector<int>& nums) {
4+
int n = nums.size();
5+
vector<bool> vis(n);
6+
int res = 0;
7+
for (int i = 0; i < n; ++i) {
8+
if (vis[i]) continue;
9+
int cur = nums[i], m = 1;
10+
vis[cur] = true;
11+
while (nums[cur] != nums[i]) {
12+
cur = nums[cur];
13+
++m;
14+
vis[cur] = true;
15+
}
16+
res = max(res, m);
17+
}
18+
return res;
19+
}
20+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
func arrayNesting(nums []int) int {
2+
n := len(nums)
3+
vis := make([]bool, n)
4+
ans := 0
5+
for i := 0; i < n; i++ {
6+
if vis[i] {
7+
continue
8+
}
9+
cur, m := nums[i], 1
10+
vis[cur] = true
11+
for nums[cur] != nums[i] {
12+
cur = nums[cur]
13+
m++
14+
vis[cur] = true
15+
}
16+
if m > ans {
17+
ans = m
18+
}
19+
}
20+
return ans
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public int arrayNesting(int[] nums) {
3+
int n = nums.length;
4+
boolean[] vis = new boolean[n];
5+
int res = 0;
6+
for (int i = 0; i < n; i++) {
7+
if (vis[i]) {
8+
continue;
9+
}
10+
int cur = nums[i], m = 1;
11+
vis[cur] = true;
12+
while (nums[cur] != nums[i]) {
13+
cur = nums[cur];
14+
m++;
15+
vis[cur] = true;
16+
}
17+
res = Math.max(res, m);
18+
}
19+
return res;
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def arrayNesting(self, nums: List[int]) -> int:
3+
n = len(nums)
4+
vis = [False] * n
5+
res = 0
6+
for i in range(n):
7+
if vis[i]:
8+
continue
9+
cur, m = nums[i], 1
10+
vis[cur] = True
11+
while nums[cur] != nums[i]:
12+
cur = nums[cur]
13+
m += 1
14+
vis[cur] = True
15+
res = max(res, m)
16+
return res

0 commit comments

Comments
 (0)