Skip to content

Commit 633e33c

Browse files
committed
feat: add solutions to lc problem: No.1183
No.1183.Maximum Number of Ones
1 parent 08f4164 commit 633e33c

File tree

7 files changed

+300
-2
lines changed

7 files changed

+300
-2
lines changed

solution/1100-1199/1183.Maximum Number of Ones/README.md

Lines changed: 110 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,131 @@
5050

5151
<!-- 这里可写通用的实现逻辑 -->
5252

53+
**方法一:统计等效位置**
54+
55+
为了方便说明,我们不妨令 `x = sideLength`
56+
57+
考虑一个 $x\times x$ 的正方形,我们需要在正方形里面取最多 `maxOnes` 个点,将其置为 1。注意到当坐标 $(i, j)$ 处的点被选取后,所有坐标为 $(i\pm k_1 \times x, j\pm k_2 \times x)$ 的点都可以等效地置为 1。因此,我们算出坐标 $(i, j)$ 在矩阵中的等效位置的数量,取数量最多的前 `maxOnes` 个即可。
58+
59+
时间复杂度 $O(m\times n)$。其中 $m$, $n$ 分别是矩阵的行数和列数。
60+
5361
<!-- tabs:start -->
5462

5563
### **Python3**
5664

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

5967
```python
60-
68+
class Solution:
69+
def maximumNumberOfOnes(
70+
self, width: int, height: int, sideLength: int, maxOnes: int
71+
) -> int:
72+
x = sideLength
73+
cnt = [0] * (x * x)
74+
for i in range(width):
75+
for j in range(height):
76+
k = (i % x) * x + (j % x)
77+
cnt[k] += 1
78+
cnt.sort(reverse=True)
79+
return sum(cnt[:maxOnes])
6180
```
6281

6382
### **Java**
6483

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

6786
```java
87+
class Solution {
88+
public int maximumNumberOfOnes(int width, int height, int sideLength, int maxOnes) {
89+
int x = sideLength;
90+
int[] cnt = new int[x * x];
91+
for (int i = 0; i < width; ++i) {
92+
for (int j = 0; j < height; ++j) {
93+
int k = (i % x) * x + (j % x);
94+
++cnt[k];
95+
}
96+
}
97+
Arrays.sort(cnt);
98+
int ans = 0;
99+
for (int i = 0; i < maxOnes; ++i) {
100+
ans += cnt[cnt.length - i - 1];
101+
}
102+
return ans;
103+
}
104+
}
105+
```
106+
107+
### **C++**
108+
109+
```cpp
110+
class Solution {
111+
public:
112+
int maximumNumberOfOnes(int width, int height, int sideLength, int maxOnes) {
113+
int x = sideLength;
114+
vector<int> cnt(x * x);
115+
for (int i = 0; i < width; ++i) {
116+
for (int j = 0; j < height; ++j) {
117+
int k = (i % x) * x + (j % x);
118+
++cnt[k];
119+
}
120+
}
121+
sort(cnt.rbegin(), cnt.rend());
122+
int ans = 0;
123+
for (int i = 0; i < maxOnes; ++i) {
124+
ans += cnt[i];
125+
}
126+
return ans;
127+
}
128+
};
129+
```
130+
131+
### **Go**
132+
133+
```go
134+
func maximumNumberOfOnes(width int, height int, sideLength int, maxOnes int) int {
135+
x := sideLength
136+
cnt := make([]int, x*x)
137+
for i := 0; i < width; i++ {
138+
for j := 0; j < height; j++ {
139+
k := (i%x)*x + (j % x)
140+
cnt[k]++
141+
}
142+
}
143+
sort.Ints(cnt)
144+
ans := 0
145+
for i := range cnt[:maxOnes] {
146+
ans += cnt[len(cnt)-i-1]
147+
}
148+
return ans
149+
}
150+
```
68151

152+
### **JavaScript**
153+
154+
```js
155+
/**
156+
* @param {number} width
157+
* @param {number} height
158+
* @param {number} sideLength
159+
* @param {number} maxOnes
160+
* @return {number}
161+
*/
162+
var maximumNumberOfOnes = function (width, height, sideLength, maxOnes) {
163+
const x = sideLength;
164+
const cnt = new Array(x * x).fill(0);
165+
for (let i = 0; i < width; ++i) {
166+
for (let j = 0; j < height; ++j) {
167+
const k = (i % x) * x + (j % x);
168+
++cnt[k];
169+
}
170+
}
171+
cnt.sort((a, b) => b - a);
172+
let ans = 0;
173+
for (let i = 0; i < maxOnes; ++i) {
174+
ans += cnt[i];
175+
}
176+
return ans;
177+
};
69178
```
70179

71180
### **...**

solution/1100-1199/1183.Maximum Number of Ones/README_EN.md

Lines changed: 102 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,114 @@ The best solution that has 4 ones is:
4949
### **Python3**
5050

5151
```python
52-
52+
class Solution:
53+
def maximumNumberOfOnes(
54+
self, width: int, height: int, sideLength: int, maxOnes: int
55+
) -> int:
56+
x = sideLength
57+
cnt = [0] * (x * x)
58+
for i in range(width):
59+
for j in range(height):
60+
k = (i % x) * x + (j % x)
61+
cnt[k] += 1
62+
cnt.sort(reverse=True)
63+
return sum(cnt[:maxOnes])
5364
```
5465

5566
### **Java**
5667

5768
```java
69+
class Solution {
70+
public int maximumNumberOfOnes(int width, int height, int sideLength, int maxOnes) {
71+
int x = sideLength;
72+
int[] cnt = new int[x * x];
73+
for (int i = 0; i < width; ++i) {
74+
for (int j = 0; j < height; ++j) {
75+
int k = (i % x) * x + (j % x);
76+
++cnt[k];
77+
}
78+
}
79+
Arrays.sort(cnt);
80+
int ans = 0;
81+
for (int i = 0; i < maxOnes; ++i) {
82+
ans += cnt[cnt.length - i - 1];
83+
}
84+
return ans;
85+
}
86+
}
87+
```
88+
89+
### **C++**
90+
91+
```cpp
92+
class Solution {
93+
public:
94+
int maximumNumberOfOnes(int width, int height, int sideLength, int maxOnes) {
95+
int x = sideLength;
96+
vector<int> cnt(x * x);
97+
for (int i = 0; i < width; ++i) {
98+
for (int j = 0; j < height; ++j) {
99+
int k = (i % x) * x + (j % x);
100+
++cnt[k];
101+
}
102+
}
103+
sort(cnt.rbegin(), cnt.rend());
104+
int ans = 0;
105+
for (int i = 0; i < maxOnes; ++i) {
106+
ans += cnt[i];
107+
}
108+
return ans;
109+
}
110+
};
111+
```
112+
113+
### **Go**
114+
115+
```go
116+
func maximumNumberOfOnes(width int, height int, sideLength int, maxOnes int) int {
117+
x := sideLength
118+
cnt := make([]int, x*x)
119+
for i := 0; i < width; i++ {
120+
for j := 0; j < height; j++ {
121+
k := (i%x)*x + (j % x)
122+
cnt[k]++
123+
}
124+
}
125+
sort.Ints(cnt)
126+
ans := 0
127+
for i := range cnt[:maxOnes] {
128+
ans += cnt[len(cnt)-i-1]
129+
}
130+
return ans
131+
}
132+
```
58133

134+
### **JavaScript**
135+
136+
```js
137+
/**
138+
* @param {number} width
139+
* @param {number} height
140+
* @param {number} sideLength
141+
* @param {number} maxOnes
142+
* @return {number}
143+
*/
144+
var maximumNumberOfOnes = function (width, height, sideLength, maxOnes) {
145+
const x = sideLength;
146+
const cnt = new Array(x * x).fill(0);
147+
for (let i = 0; i < width; ++i) {
148+
for (let j = 0; j < height; ++j) {
149+
const k = (i % x) * x + (j % x);
150+
++cnt[k];
151+
}
152+
}
153+
cnt.sort((a, b) => b - a);
154+
let ans = 0;
155+
for (let i = 0; i < maxOnes; ++i) {
156+
ans += cnt[i];
157+
}
158+
return ans;
159+
};
59160
```
60161

61162
### **...**
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
int maximumNumberOfOnes(int width, int height, int sideLength, int maxOnes) {
4+
int x = sideLength;
5+
vector<int> cnt(x * x);
6+
for (int i = 0; i < width; ++i) {
7+
for (int j = 0; j < height; ++j) {
8+
int k = (i % x) * x + (j % x);
9+
++cnt[k];
10+
}
11+
}
12+
sort(cnt.rbegin(), cnt.rend());
13+
int ans = 0;
14+
for (int i = 0; i < maxOnes; ++i) {
15+
ans += cnt[i];
16+
}
17+
return ans;
18+
}
19+
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
func maximumNumberOfOnes(width int, height int, sideLength int, maxOnes int) int {
2+
x := sideLength
3+
cnt := make([]int, x*x)
4+
for i := 0; i < width; i++ {
5+
for j := 0; j < height; j++ {
6+
k := (i%x)*x + (j % x)
7+
cnt[k]++
8+
}
9+
}
10+
sort.Ints(cnt)
11+
ans := 0
12+
for i := range cnt[:maxOnes] {
13+
ans += cnt[len(cnt)-i-1]
14+
}
15+
return ans
16+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public int maximumNumberOfOnes(int width, int height, int sideLength, int maxOnes) {
3+
int x = sideLength;
4+
int[] cnt = new int[x * x];
5+
for (int i = 0; i < width; ++i) {
6+
for (int j = 0; j < height; ++j) {
7+
int k = (i % x) * x + (j % x);
8+
++cnt[k];
9+
}
10+
}
11+
Arrays.sort(cnt);
12+
int ans = 0;
13+
for (int i = 0; i < maxOnes; ++i) {
14+
ans += cnt[cnt.length - i - 1];
15+
}
16+
return ans;
17+
}
18+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @param {number} width
3+
* @param {number} height
4+
* @param {number} sideLength
5+
* @param {number} maxOnes
6+
* @return {number}
7+
*/
8+
var maximumNumberOfOnes = function (width, height, sideLength, maxOnes) {
9+
const x = sideLength;
10+
const cnt = new Array(x * x).fill(0);
11+
for (let i = 0; i < width; ++i) {
12+
for (let j = 0; j < height; ++j) {
13+
const k = (i % x) * x + (j % x);
14+
++cnt[k];
15+
}
16+
}
17+
cnt.sort((a, b) => b - a);
18+
let ans = 0;
19+
for (let i = 0; i < maxOnes; ++i) {
20+
ans += cnt[i];
21+
}
22+
return ans;
23+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def maximumNumberOfOnes(
3+
self, width: int, height: int, sideLength: int, maxOnes: int
4+
) -> int:
5+
x = sideLength
6+
cnt = [0] * (x * x)
7+
for i in range(width):
8+
for j in range(height):
9+
k = (i % x) * x + (j % x)
10+
cnt[k] += 1
11+
cnt.sort(reverse=True)
12+
return sum(cnt[:maxOnes])

0 commit comments

Comments
 (0)