Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a136e22

Browse files
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‎

Lines changed: 90 additions & 2 deletions
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‎

Lines changed: 88 additions & 2 deletions
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
### **...**
Lines changed: 20 additions & 0 deletions
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+
};
Lines changed: 21 additions & 0 deletions
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+
}
Lines changed: 21 additions & 0 deletions
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+
}
Lines changed: 16 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /