Skip to content

Commit b70cf40

Browse files
committed
feat: add solutions to lc problem: No.0442
No.0442.Find All Duplicates in an Array
1 parent 03e9f50 commit b70cf40

File tree

6 files changed

+202
-18
lines changed

6 files changed

+202
-18
lines changed

Diff for: solution/0400-0499/0442.Find All Duplicates in an Array/README.md

+74-1
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,88 @@
5555
<!-- 这里可写当前语言的特殊实现逻辑 -->
5656

5757
```python
58-
58+
class Solution:
59+
def findDuplicates(self, nums: List[int]) -> List[int]:
60+
for i in range(len(nums)):
61+
while nums[i] != nums[nums[i] - 1]:
62+
nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]
63+
return [v for i, v in enumerate(nums) if v != i + 1]
5964
```
6065

6166
### **Java**
6267

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

6570
```java
71+
class Solution {
72+
public List<Integer> findDuplicates(int[] nums) {
73+
int n = nums.length;
74+
for (int i = 0; i < n; ++i) {
75+
while (nums[i] != nums[nums[i] - 1]) {
76+
swap(nums, i, nums[i] - 1);
77+
}
78+
}
79+
List<Integer> ans = new ArrayList<>();
80+
for (int i = 0; i < n; ++i) {
81+
if (nums[i] != i + 1) {
82+
ans.add(nums[i]);
83+
}
84+
}
85+
return ans;
86+
}
87+
88+
void swap(int[] nums, int i, int j) {
89+
int t = nums[i];
90+
nums[i] = nums[j];
91+
nums[j] = t;
92+
}
93+
}
94+
```
95+
96+
### **C++**
97+
98+
```cpp
99+
class Solution {
100+
public:
101+
vector<int> findDuplicates(vector<int>& nums) {
102+
int n = nums.size();
103+
for (int i = 0; i < n; ++i)
104+
{
105+
while (nums[i] != nums[nums[i] - 1])
106+
{
107+
swap(nums[i], nums[nums[i] - 1]);
108+
}
109+
}
110+
vector<int> ans;
111+
for (int i = 0; i < n; ++i)
112+
{
113+
if (nums[i] != i + 1)
114+
{
115+
ans.push_back(nums[i]);
116+
}
117+
}
118+
return ans;
119+
}
120+
};
121+
```
66122
123+
### **Go**
124+
125+
```go
126+
func findDuplicates(nums []int) []int {
127+
for i := range nums {
128+
for nums[i] != nums[nums[i]-1] {
129+
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
130+
}
131+
}
132+
var ans []int
133+
for i, v := range nums {
134+
if v != i+1 {
135+
ans = append(ans, v)
136+
}
137+
}
138+
return ans
139+
}
67140
```
68141

69142
### **...**

Diff for: solution/0400-0499/0442.Find All Duplicates in an Array/README_EN.md

+74-1
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,86 @@
3636
### **Python3**
3737

3838
```python
39-
39+
class Solution:
40+
def findDuplicates(self, nums: List[int]) -> List[int]:
41+
for i in range(len(nums)):
42+
while nums[i] != nums[nums[i] - 1]:
43+
nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]
44+
return [v for i, v in enumerate(nums) if v != i + 1]
4045
```
4146

4247
### **Java**
4348

4449
```java
50+
class Solution {
51+
public List<Integer> findDuplicates(int[] nums) {
52+
int n = nums.length;
53+
for (int i = 0; i < n; ++i) {
54+
while (nums[i] != nums[nums[i] - 1]) {
55+
swap(nums, i, nums[i] - 1);
56+
}
57+
}
58+
List<Integer> ans = new ArrayList<>();
59+
for (int i = 0; i < n; ++i) {
60+
if (nums[i] != i + 1) {
61+
ans.add(nums[i]);
62+
}
63+
}
64+
return ans;
65+
}
66+
67+
void swap(int[] nums, int i, int j) {
68+
int t = nums[i];
69+
nums[i] = nums[j];
70+
nums[j] = t;
71+
}
72+
}
73+
```
74+
75+
### **C++**
76+
77+
```cpp
78+
class Solution {
79+
public:
80+
vector<int> findDuplicates(vector<int>& nums) {
81+
int n = nums.size();
82+
for (int i = 0; i < n; ++i)
83+
{
84+
while (nums[i] != nums[nums[i] - 1])
85+
{
86+
swap(nums[i], nums[nums[i] - 1]);
87+
}
88+
}
89+
vector<int> ans;
90+
for (int i = 0; i < n; ++i)
91+
{
92+
if (nums[i] != i + 1)
93+
{
94+
ans.push_back(nums[i]);
95+
}
96+
}
97+
return ans;
98+
}
99+
};
100+
```
45101
102+
### **Go**
103+
104+
```go
105+
func findDuplicates(nums []int) []int {
106+
for i := range nums {
107+
for nums[i] != nums[nums[i]-1] {
108+
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
109+
}
110+
}
111+
var ans []int
112+
for i, v := range nums {
113+
if v != i+1 {
114+
ans = append(ans, v)
115+
}
116+
}
117+
return ans
118+
}
46119
```
47120

48121
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
vector<int> findDuplicates(vector<int>& nums) {
4+
int n = nums.size();
5+
for (int i = 0; i < n; ++i)
6+
{
7+
while (nums[i] != nums[nums[i] - 1])
8+
{
9+
swap(nums[i], nums[nums[i] - 1]);
10+
}
11+
}
12+
vector<int> ans;
13+
for (int i = 0; i < n; ++i)
14+
{
15+
if (nums[i] != i + 1)
16+
{
17+
ans.push_back(nums[i]);
18+
}
19+
}
20+
return ans;
21+
}
22+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
func findDuplicates(nums []int) []int {
2+
for i := range nums {
3+
for nums[i] != nums[nums[i]-1] {
4+
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
5+
}
6+
}
7+
var ans []int
8+
for i, v := range nums {
9+
if v != i+1 {
10+
ans = append(ans, v)
11+
}
12+
}
13+
return ans
14+
}
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,23 @@
11
class Solution {
22
public List<Integer> findDuplicates(int[] nums) {
3-
List<Integer> ans = new ArrayList<>();
4-
for(int i = 0; i < nums.length; i++) {
5-
if(nums[i] != nums[nums[i] - 1]) {
3+
int n = nums.length;
4+
for (int i = 0; i < n; ++i) {
5+
while (nums[i] != nums[nums[i] - 1]) {
66
swap(nums, i, nums[i] - 1);
7-
i--;
87
}
98
}
10-
11-
System.out.println(Arrays.toString(nums));
12-
13-
for(int i = 0; i < nums.length; i++) {
14-
if(nums[i] != i + 1) {
9+
List<Integer> ans = new ArrayList<>();
10+
for (int i = 0; i < n; ++i) {
11+
if (nums[i] != i + 1) {
1512
ans.add(nums[i]);
1613
}
1714
}
18-
1915
return ans;
2016
}
21-
22-
private void swap(int[] nums, int i, int j) {
23-
int tmp = nums[i];
24-
nums[i] = nums[j];
25-
nums[j] = tmp;
26-
}
17+
18+
void swap(int[] nums, int i, int j) {
19+
int t = nums[i];
20+
nums[i] = nums[j];
21+
nums[j] = t;
22+
}
2723
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Solution:
2+
def findDuplicates(self, nums: List[int]) -> List[int]:
3+
for i in range(len(nums)):
4+
while nums[i] != nums[nums[i] - 1]:
5+
nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]
6+
return [v for i, v in enumerate(nums) if v != i + 1]

0 commit comments

Comments
 (0)