Skip to content

Commit fb34383

Browse files
committedJan 10, 2022
feat: add solutions to lc problems: No.2133,2134
* No.2133.Check if Every Row and Column Contains All Numbers * No.2134.Minimum Swaps to Group All 1's Together II
1 parent 87940c3 commit fb34383

File tree

12 files changed

+560
-11
lines changed

12 files changed

+560
-11
lines changed
 

‎solution/2100-2199/2133.Check if Every Row and Column Contains All Numbers/README.md

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

5757
```python
58-
58+
class Solution:
59+
def checkValid(self, matrix: List[List[int]]) -> bool:
60+
n = len(matrix)
61+
for i in range(n):
62+
seen = [False] * n
63+
for j in range(n):
64+
v = matrix[i][j] - 1
65+
if seen[v]:
66+
return False
67+
seen[v] = True
68+
for j in range(n):
69+
seen = [False] * n
70+
for i in range(n):
71+
v = matrix[i][j] - 1
72+
if seen[v]:
73+
return False
74+
seen[v] = True
75+
return True
5976
```
6077

6178
### **Java**
6279

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

6582
```java
66-
83+
class Solution {
84+
public boolean checkValid(int[][] matrix) {
85+
int n = matrix.length;
86+
for (int i = 0; i < n; ++i) {
87+
boolean[] seen = new boolean[n];
88+
for (int j = 0; j < n; ++j) {
89+
int v = matrix[i][j] - 1;
90+
if (seen[v]) {
91+
return false;
92+
}
93+
seen[v] = true;
94+
}
95+
}
96+
for (int j = 0; j < n; ++j) {
97+
boolean[] seen = new boolean[n];
98+
for (int i = 0; i < n; ++i) {
99+
int v = matrix[i][j] - 1;
100+
if (seen[v]) {
101+
return false;
102+
}
103+
seen[v] = true;
104+
}
105+
}
106+
return true;
107+
}
108+
}
67109
```
68110

69111
### **TypeScript**
@@ -84,9 +126,70 @@ function checkValid(matrix: number[][]): boolean {
84126
}
85127
}
86128
return true;
129+
}
130+
```
131+
132+
### **C++**
133+
134+
```cpp
135+
class Solution {
136+
public:
137+
bool checkValid(vector<vector<int>>& matrix) {
138+
int n = matrix.size();
139+
for (int i = 0; i < n; ++i)
140+
{
141+
vector<bool> seen(n);
142+
for (int j = 0; j < n; ++j)
143+
{
144+
int v = matrix[i][j] - 1;
145+
if (seen[v]) return false;
146+
seen[v] = true;
147+
}
148+
}
149+
for (int j = 0; j < n; ++j)
150+
{
151+
vector<bool> seen(n);
152+
for (int i = 0; i < n; ++i)
153+
{
154+
int v = matrix[i][j] - 1;
155+
if (seen[v]) return false;
156+
seen[v] = true;
157+
}
158+
}
159+
return true;
160+
}
87161
};
88162
```
89163
164+
### **Go**
165+
166+
```go
167+
func checkValid(matrix [][]int) bool {
168+
n := len(matrix)
169+
for i := 0; i < n; i++ {
170+
seen := make([]bool, n)
171+
for j := 0; j < n; j++ {
172+
v := matrix[i][j] - 1
173+
if seen[v] {
174+
return false
175+
}
176+
seen[v] = true
177+
}
178+
}
179+
for j := 0; j < n; j++ {
180+
seen := make([]bool, n)
181+
for i := 0; i < n; i++ {
182+
v := matrix[i][j] - 1
183+
if seen[v] {
184+
return false
185+
}
186+
seen[v] = true
187+
}
188+
}
189+
return true
190+
}
191+
```
192+
90193
### **...**
91194

92195
```

‎solution/2100-2199/2133.Check if Every Row and Column Contains All Numbers/README_EN.md

+105-3
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,62 @@ Hence, we return false.
3636
<li><code>1 &lt;= matrix[i][j] &lt;= n</code></li>
3737
</ul>
3838

39-
4039
## Solutions
4140

4241
<!-- tabs:start -->
4342

4443
### **Python3**
4544

4645
```python
47-
46+
class Solution:
47+
def checkValid(self, matrix: List[List[int]]) -> bool:
48+
n = len(matrix)
49+
for i in range(n):
50+
seen = [False] * n
51+
for j in range(n):
52+
v = matrix[i][j] - 1
53+
if seen[v]:
54+
return False
55+
seen[v] = True
56+
for j in range(n):
57+
seen = [False] * n
58+
for i in range(n):
59+
v = matrix[i][j] - 1
60+
if seen[v]:
61+
return False
62+
seen[v] = True
63+
return True
4864
```
4965

5066
### **Java**
5167

5268
```java
53-
69+
class Solution {
70+
public boolean checkValid(int[][] matrix) {
71+
int n = matrix.length;
72+
for (int i = 0; i < n; ++i) {
73+
boolean[] seen = new boolean[n];
74+
for (int j = 0; j < n; ++j) {
75+
int v = matrix[i][j] - 1;
76+
if (seen[v]) {
77+
return false;
78+
}
79+
seen[v] = true;
80+
}
81+
}
82+
for (int j = 0; j < n; ++j) {
83+
boolean[] seen = new boolean[n];
84+
for (int i = 0; i < n; ++i) {
85+
int v = matrix[i][j] - 1;
86+
if (seen[v]) {
87+
return false;
88+
}
89+
seen[v] = true;
90+
}
91+
}
92+
return true;
93+
}
94+
}
5495
```
5596

5697
### **TypeScript**
@@ -69,9 +110,70 @@ function checkValid(matrix: number[][]): boolean {
69110
}
70111
}
71112
return true;
113+
}
114+
```
115+
116+
### **C++**
117+
118+
```cpp
119+
class Solution {
120+
public:
121+
bool checkValid(vector<vector<int>>& matrix) {
122+
int n = matrix.size();
123+
for (int i = 0; i < n; ++i)
124+
{
125+
vector<bool> seen(n);
126+
for (int j = 0; j < n; ++j)
127+
{
128+
int v = matrix[i][j] - 1;
129+
if (seen[v]) return false;
130+
seen[v] = true;
131+
}
132+
}
133+
for (int j = 0; j < n; ++j)
134+
{
135+
vector<bool> seen(n);
136+
for (int i = 0; i < n; ++i)
137+
{
138+
int v = matrix[i][j] - 1;
139+
if (seen[v]) return false;
140+
seen[v] = true;
141+
}
142+
}
143+
return true;
144+
}
72145
};
73146
```
74147
148+
### **Go**
149+
150+
```go
151+
func checkValid(matrix [][]int) bool {
152+
n := len(matrix)
153+
for i := 0; i < n; i++ {
154+
seen := make([]bool, n)
155+
for j := 0; j < n; j++ {
156+
v := matrix[i][j] - 1
157+
if seen[v] {
158+
return false
159+
}
160+
seen[v] = true
161+
}
162+
}
163+
for j := 0; j < n; j++ {
164+
seen := make([]bool, n)
165+
for i := 0; i < n; i++ {
166+
v := matrix[i][j] - 1
167+
if seen[v] {
168+
return false
169+
}
170+
seen[v] = true
171+
}
172+
}
173+
return true
174+
}
175+
```
176+
75177
### **...**
76178

77179
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution {
2+
public:
3+
bool checkValid(vector<vector<int>>& matrix) {
4+
int n = matrix.size();
5+
for (int i = 0; i < n; ++i)
6+
{
7+
vector<bool> seen(n);
8+
for (int j = 0; j < n; ++j)
9+
{
10+
int v = matrix[i][j] - 1;
11+
if (seen[v]) return false;
12+
seen[v] = true;
13+
}
14+
}
15+
for (int j = 0; j < n; ++j)
16+
{
17+
vector<bool> seen(n);
18+
for (int i = 0; i < n; ++i)
19+
{
20+
int v = matrix[i][j] - 1;
21+
if (seen[v]) return false;
22+
seen[v] = true;
23+
}
24+
}
25+
return true;
26+
}
27+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
func checkValid(matrix [][]int) bool {
2+
n := len(matrix)
3+
for i := 0; i < n; i++ {
4+
seen := make([]bool, n)
5+
for j := 0; j < n; j++ {
6+
v := matrix[i][j] - 1
7+
if seen[v] {
8+
return false
9+
}
10+
seen[v] = true
11+
}
12+
}
13+
for j := 0; j < n; j++ {
14+
seen := make([]bool, n)
15+
for i := 0; i < n; i++ {
16+
v := matrix[i][j] - 1
17+
if seen[v] {
18+
return false
19+
}
20+
seen[v] = true
21+
}
22+
}
23+
return true
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
public boolean checkValid(int[][] matrix) {
3+
int n = matrix.length;
4+
for (int i = 0; i < n; ++i) {
5+
boolean[] seen = new boolean[n];
6+
for (int j = 0; j < n; ++j) {
7+
int v = matrix[i][j] - 1;
8+
if (seen[v]) {
9+
return false;
10+
}
11+
seen[v] = true;
12+
}
13+
}
14+
for (int j = 0; j < n; ++j) {
15+
boolean[] seen = new boolean[n];
16+
for (int i = 0; i < n; ++i) {
17+
int v = matrix[i][j] - 1;
18+
if (seen[v]) {
19+
return false;
20+
}
21+
seen[v] = true;
22+
}
23+
}
24+
return true;
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def checkValid(self, matrix: List[List[int]]) -> bool:
3+
n = len(matrix)
4+
for i in range(n):
5+
seen = [False] * n
6+
for j in range(n):
7+
v = matrix[i][j] - 1
8+
if seen[v]:
9+
return False
10+
seen[v] = True
11+
for j in range(n):
12+
seen = [False] * n
13+
for i in range(n):
14+
v = matrix[i][j] - 1
15+
if seen[v]:
16+
return False
17+
seen[v] = True
18+
return True

‎solution/2100-2199/2134.Minimum Swaps to Group All 1's Together II/README.md

+90-3
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,56 @@
5757

5858
<!-- 这里可写通用的实现逻辑 -->
5959

60+
前缀和 + 滑动窗口。
61+
6062
<!-- tabs:start -->
6163

6264
### **Python3**
6365

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

6668
```python
67-
69+
class Solution:
70+
def minSwaps(self, nums: List[int]) -> int:
71+
cnt = nums.count(1)
72+
n = len(nums)
73+
s = [0] * ((n << 1) + 1)
74+
for i in range(n << 1):
75+
s[i + 1] = s[i] + nums[i % n]
76+
mx = 0
77+
for i in range(n << 1):
78+
j = i + cnt - 1
79+
if j < (n << 1):
80+
mx = max(mx, s[j + 1] - s[i])
81+
return cnt - mx
6882
```
6983

7084
### **Java**
7185

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

7488
```java
75-
89+
class Solution {
90+
public int minSwaps(int[] nums) {
91+
int cnt = 0;
92+
for (int v : nums) {
93+
cnt += v;
94+
}
95+
int n = nums.length;
96+
int[] s = new int[(n << 1) + 1];
97+
for (int i = 0; i < (n << 1); ++i) {
98+
s[i + 1] = s[i] + nums[i % n];
99+
}
100+
int mx = 0;
101+
for (int i = 0; i < (n << 1); ++i) {
102+
int j = i + cnt - 1;
103+
if (j < (n << 1)) {
104+
mx = Math.max(mx, s[j + 1] - s[i]);
105+
}
106+
}
107+
return cnt - mx;
108+
}
109+
}
76110
```
77111

78112
### **TypeScript**
@@ -88,13 +122,66 @@ function minSwaps(nums: number[]): number {
88122
for (let i = m; i < m + n; i++) {
89123
let prev = nums[i - m];
90124
let post = nums[i % n];
91-
cnt += (post - prev);
125+
cnt += post - prev;
92126
ans = Math.max(cnt, ans);
93127
}
94128
return m - ans;
129+
}
130+
```
131+
132+
### **C++**
133+
134+
```cpp
135+
class Solution {
136+
public:
137+
int minSwaps(vector<int>& nums) {
138+
int cnt = 0;
139+
for (int& v : nums) cnt += v;
140+
int n = nums.size();
141+
vector<int> s((n << 1) + 1);
142+
for (int i = 0; i < (n << 1); ++i) s[i + 1] = s[i] + nums[i % n];
143+
int mx = 0;
144+
for (int i = 0; i < (n << 1); ++i)
145+
{
146+
int j = i + cnt - 1;
147+
if (j < (n << 1)) mx = max(mx, s[j + 1] - s[i]);
148+
}
149+
return cnt - mx;
150+
}
95151
};
96152
```
97153
154+
### **Go**
155+
156+
```go
157+
func minSwaps(nums []int) int {
158+
cnt := 0
159+
for _, v := range nums {
160+
cnt += v
161+
}
162+
n := len(nums)
163+
s := make([]int, (n<<1)+1)
164+
for i := 0; i < (n << 1); i++ {
165+
s[i+1] = s[i] + nums[i%n]
166+
}
167+
mx := 0
168+
for i := 0; i < (n << 1); i++ {
169+
j := i + cnt - 1
170+
if j < (n << 1) {
171+
mx = max(mx, s[j+1]-s[i])
172+
}
173+
}
174+
return cnt - mx
175+
}
176+
177+
func max(a, b int) int {
178+
if a > b {
179+
return a
180+
}
181+
return b
182+
}
183+
```
184+
98185
### **...**
99186

100187
```

‎solution/2100-2199/2134.Minimum Swaps to Group All 1's Together II/README_EN.md

+88-3
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,45 @@ Thus, the minimum number of swaps required is 0.
6060
### **Python3**
6161

6262
```python
63-
63+
class Solution:
64+
def minSwaps(self, nums: List[int]) -> int:
65+
cnt = nums.count(1)
66+
n = len(nums)
67+
s = [0] * ((n << 1) + 1)
68+
for i in range(n << 1):
69+
s[i + 1] = s[i] + nums[i % n]
70+
mx = 0
71+
for i in range(n << 1):
72+
j = i + cnt - 1
73+
if j < (n << 1):
74+
mx = max(mx, s[j + 1] - s[i])
75+
return cnt - mx
6476
```
6577

6678
### **Java**
6779

6880
```java
69-
81+
class Solution {
82+
public int minSwaps(int[] nums) {
83+
int cnt = 0;
84+
for (int v : nums) {
85+
cnt += v;
86+
}
87+
int n = nums.length;
88+
int[] s = new int[(n << 1) + 1];
89+
for (int i = 0; i < (n << 1); ++i) {
90+
s[i + 1] = s[i] + nums[i % n];
91+
}
92+
int mx = 0;
93+
for (int i = 0; i < (n << 1); ++i) {
94+
int j = i + cnt - 1;
95+
if (j < (n << 1)) {
96+
mx = Math.max(mx, s[j + 1] - s[i]);
97+
}
98+
}
99+
return cnt - mx;
100+
}
101+
}
70102
```
71103

72104
### **TypeScript**
@@ -80,13 +112,66 @@ function minSwaps(nums: number[]): number {
80112
for (let i = m; i < m + n; i++) {
81113
let prev = nums[i - m];
82114
let post = nums[i % n];
83-
cnt += (post - prev);
115+
cnt += post - prev;
84116
ans = Math.max(cnt, ans);
85117
}
86118
return m - ans;
119+
}
120+
```
121+
122+
### **C++**
123+
124+
```cpp
125+
class Solution {
126+
public:
127+
int minSwaps(vector<int>& nums) {
128+
int cnt = 0;
129+
for (int& v : nums) cnt += v;
130+
int n = nums.size();
131+
vector<int> s((n << 1) + 1);
132+
for (int i = 0; i < (n << 1); ++i) s[i + 1] = s[i] + nums[i % n];
133+
int mx = 0;
134+
for (int i = 0; i < (n << 1); ++i)
135+
{
136+
int j = i + cnt - 1;
137+
if (j < (n << 1)) mx = max(mx, s[j + 1] - s[i]);
138+
}
139+
return cnt - mx;
140+
}
87141
};
88142
```
89143
144+
### **Go**
145+
146+
```go
147+
func minSwaps(nums []int) int {
148+
cnt := 0
149+
for _, v := range nums {
150+
cnt += v
151+
}
152+
n := len(nums)
153+
s := make([]int, (n<<1)+1)
154+
for i := 0; i < (n << 1); i++ {
155+
s[i+1] = s[i] + nums[i%n]
156+
}
157+
mx := 0
158+
for i := 0; i < (n << 1); i++ {
159+
j := i + cnt - 1
160+
if j < (n << 1) {
161+
mx = max(mx, s[j+1]-s[i])
162+
}
163+
}
164+
return cnt - mx
165+
}
166+
167+
func max(a, b int) int {
168+
if a > b {
169+
return a
170+
}
171+
return b
172+
}
173+
```
174+
90175
### **...**
91176

92177
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public:
3+
int minSwaps(vector<int>& nums) {
4+
int cnt = 0;
5+
for (int& v : nums) cnt += v;
6+
int n = nums.size();
7+
vector<int> s((n << 1) + 1);
8+
for (int i = 0; i < (n << 1); ++i) s[i + 1] = s[i] + nums[i % n];
9+
int mx = 0;
10+
for (int i = 0; i < (n << 1); ++i)
11+
{
12+
int j = i + cnt - 1;
13+
if (j < (n << 1)) mx = max(mx, s[j + 1] - s[i]);
14+
}
15+
return cnt - mx;
16+
}
17+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
func minSwaps(nums []int) int {
2+
cnt := 0
3+
for _, v := range nums {
4+
cnt += v
5+
}
6+
n := len(nums)
7+
s := make([]int, (n<<1)+1)
8+
for i := 0; i < (n << 1); i++ {
9+
s[i+1] = s[i] + nums[i%n]
10+
}
11+
mx := 0
12+
for i := 0; i < (n << 1); i++ {
13+
j := i + cnt - 1
14+
if j < (n << 1) {
15+
mx = max(mx, s[j+1]-s[i])
16+
}
17+
}
18+
return cnt - mx
19+
}
20+
21+
func max(a, b int) int {
22+
if a > b {
23+
return a
24+
}
25+
return b
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public int minSwaps(int[] nums) {
3+
int cnt = 0;
4+
for (int v : nums) {
5+
cnt += v;
6+
}
7+
int n = nums.length;
8+
int[] s = new int[(n << 1) + 1];
9+
for (int i = 0; i < (n << 1); ++i) {
10+
s[i + 1] = s[i] + nums[i % n];
11+
}
12+
int mx = 0;
13+
for (int i = 0; i < (n << 1); ++i) {
14+
int j = i + cnt - 1;
15+
if (j < (n << 1)) {
16+
mx = Math.max(mx, s[j + 1] - s[i]);
17+
}
18+
}
19+
return cnt - mx;
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def minSwaps(self, nums: List[int]) -> int:
3+
cnt = nums.count(1)
4+
n = len(nums)
5+
s = [0] * ((n << 1) + 1)
6+
for i in range(n << 1):
7+
s[i + 1] = s[i] + nums[i % n]
8+
mx = 0
9+
for i in range(n << 1):
10+
j = i + cnt - 1
11+
if j < (n << 1):
12+
mx = max(mx, s[j + 1] - s[i])
13+
return cnt - mx

0 commit comments

Comments
 (0)
Please sign in to comment.