Skip to content

Commit bff6ede

Browse files
committed
feat: add solutions for lc No.2033
1 parent 3579948 commit bff6ede

5 files changed

Lines changed: 125 additions & 67 deletions

File tree

solution/2000-2099/2033.Minimum Operations to Make a Uni-Value Grid/README.md

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ tags:
3636
<pre>
3737
<strong>输入:</strong>grid = [[2,4],[6,8]], x = 2
3838
<strong>输出:</strong>4
39-
<strong>解释:</strong>可以执行下述操作使所有元素都等于 4 :
39+
<strong>解释:</strong>可以执行下述操作使所有元素都等于 4 :
4040
- 2 加 x 一次。
4141
- 6 减 x 一次。
4242
- 8 减 x 两次。
@@ -198,38 +198,59 @@ func abs(x int) int {
198198

199199
```ts
200200
function minOperations(grid: number[][], x: number): number {
201-
const arr = grid.flat(2);
202-
arr.sort((a, b) => a - b);
203-
const median = arr[Math.floor(arr.length / 2)];
204-
205-
let res = 0;
206-
for (const val of arr) {
207-
const c = Math.abs(val - median) / x;
208-
if (c !== (c | 0)) return -1;
209-
res += c;
201+
const nums = grid.flat(2);
202+
const mod = nums[0] % x;
203+
204+
if (nums.some(num => num % x !== mod)) {
205+
return -1;
210206
}
211207

212-
return res;
208+
nums.sort((a, b) => a - b);
209+
const mid = nums[Math.floor(nums.length / 2)];
210+
return nums.reduce((ans, num) => ans + Math.abs(num - mid) / x, 0);
211+
};
212+
```
213+
214+
#### Rust
215+
216+
```rust
217+
impl Solution {
218+
pub fn min_operations(grid: Vec<Vec<i32>>, x: i32) -> i32 {
219+
let mut nums: Vec<i32> = grid.into_iter().flatten().collect();
220+
let mod_val = nums[0] % x;
221+
222+
if nums.iter().any(|&num| num % x != mod_val) {
223+
return -1;
224+
}
225+
226+
nums.sort_unstable();
227+
228+
let mid = nums[nums.len() / 2];
229+
nums.iter().fold(0, |acc, &num| acc + (num - mid).abs() / x)
230+
}
213231
}
214232
```
215233

216234
#### JavaScript
217235

218236
```js
219-
function minOperations(grid, x) {
220-
const arr = grid.flat(2);
221-
arr.sort((a, b) => a - b);
222-
const median = arr[Math.floor(arr.length / 2)];
223-
224-
let res = 0;
225-
for (const val of arr) {
226-
const c = Math.abs(val - median) / x;
227-
if (c !== (c | 0)) return -1;
228-
res += c;
237+
/**
238+
* @param {number[][]} grid
239+
* @param {number} x
240+
* @return {number}
241+
*/
242+
var minOperations = function (grid, x) {
243+
const nums = grid.flat(2);
244+
const mod = nums[0] % x;
245+
246+
if (nums.some(num => num % x !== mod)) {
247+
return -1;
229248
}
230249

231-
return res;
232-
}
250+
nums.sort((a, b) => a - b);
251+
const mid = nums[Math.floor(nums.length / 2)];
252+
return nums.reduce((ans, num) => ans + Math.abs(num - mid) / x, 0);
253+
};
233254
```
234255

235256
<!-- tabs:end -->

solution/2000-2099/2033.Minimum Operations to Make a Uni-Value Grid/README_EN.md

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ tags:
3333
<pre>
3434
<strong>Input:</strong> grid = [[2,4],[6,8]], x = 2
3535
<strong>Output:</strong> 4
36-
<strong>Explanation:</strong> We can make every element equal to 4 by doing the following:
36+
<strong>Explanation:</strong> We can make every element equal to 4 by doing the following:
3737
- Add x to 2 once.
3838
- Subtract x from 6 once.
3939
- Subtract x from 8 twice.
@@ -190,38 +190,59 @@ func abs(x int) int {
190190

191191
```ts
192192
function minOperations(grid: number[][], x: number): number {
193-
const arr = grid.flat(2);
194-
arr.sort((a, b) => a - b);
195-
const median = arr[Math.floor(arr.length / 2)];
196-
197-
let res = 0;
198-
for (const val of arr) {
199-
const c = Math.abs(val - median) / x;
200-
if (c !== (c | 0)) return -1;
201-
res += c;
193+
const nums = grid.flat(2);
194+
const mod = nums[0] % x;
195+
196+
if (nums.some(num => num % x !== mod)) {
197+
return -1;
202198
}
203199

204-
return res;
200+
nums.sort((a, b) => a - b);
201+
const mid = nums[Math.floor(nums.length / 2)];
202+
return nums.reduce((ans, num) => ans + Math.abs(num - mid) / x, 0);
203+
};
204+
```
205+
206+
#### Rust
207+
208+
```rust
209+
impl Solution {
210+
pub fn min_operations(grid: Vec<Vec<i32>>, x: i32) -> i32 {
211+
let mut nums: Vec<i32> = grid.into_iter().flatten().collect();
212+
let mod_val = nums[0] % x;
213+
214+
if nums.iter().any(|&num| num % x != mod_val) {
215+
return -1;
216+
}
217+
218+
nums.sort_unstable();
219+
220+
let mid = nums[nums.len() / 2];
221+
nums.iter().fold(0, |acc, &num| acc + (num - mid).abs() / x)
222+
}
205223
}
206224
```
207225

208226
#### JavaScript
209227

210228
```js
211-
function minOperations(grid, x) {
212-
const arr = grid.flat(2);
213-
arr.sort((a, b) => a - b);
214-
const median = arr[Math.floor(arr.length / 2)];
215-
216-
let res = 0;
217-
for (const val of arr) {
218-
const c = Math.abs(val - median) / x;
219-
if (c !== (c | 0)) return -1;
220-
res += c;
229+
/**
230+
* @param {number[][]} grid
231+
* @param {number} x
232+
* @return {number}
233+
*/
234+
var minOperations = function (grid, x) {
235+
const nums = grid.flat(2);
236+
const mod = nums[0] % x;
237+
238+
if (nums.some(num => num % x !== mod)) {
239+
return -1;
221240
}
222241

223-
return res;
224-
}
242+
nums.sort((a, b) => a - b);
243+
const mid = nums[Math.floor(nums.length / 2)];
244+
return nums.reduce((ans, num) => ans + Math.abs(num - mid) / x, 0);
245+
};
225246
```
226247

227248
<!-- tabs:end -->
Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
function minOperations(grid, x) {
2-
const arr = grid.flat(2);
3-
arr.sort((a, b) => a - b);
4-
const median = arr[Math.floor(arr.length / 2)];
1+
/**
2+
* @param {number[][]} grid
3+
* @param {number} x
4+
* @return {number}
5+
*/
6+
var minOperations = function (grid, x) {
7+
const nums = grid.flat(2);
8+
const mod = nums[0] % x;
59

6-
let res = 0;
7-
for (const val of arr) {
8-
const c = Math.abs(val - median) / x;
9-
if (c !== (c | 0)) return -1;
10-
res += c;
10+
if (nums.some(num => num % x !== mod)) {
11+
return -1;
1112
}
1213

13-
return res;
14-
}
14+
nums.sort((a, b) => a - b);
15+
const mid = nums[Math.floor(nums.length / 2)];
16+
return nums.reduce((ans, num) => ans + Math.abs(num - mid) / x, 0);
17+
};
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
impl Solution {
2+
pub fn min_operations(grid: Vec<Vec<i32>>, x: i32) -> i32 {
3+
let mut nums: Vec<i32> = grid.into_iter().flatten().collect();
4+
let mod_val = nums[0] % x;
5+
6+
if nums.iter().any(|&num| num % x != mod_val) {
7+
return -1;
8+
}
9+
10+
nums.sort_unstable();
11+
12+
let mid = nums[nums.len() / 2];
13+
nums.iter().fold(0, |acc, &num| acc + (num - mid).abs() / x)
14+
}
15+
}
Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
function minOperations(grid: number[][], x: number): number {
2-
const arr = grid.flat(2);
3-
arr.sort((a, b) => a - b);
4-
const median = arr[Math.floor(arr.length / 2)];
2+
const nums = grid.flat(2);
3+
const mod = nums[0] % x;
54

6-
let res = 0;
7-
for (const val of arr) {
8-
const c = Math.abs(val - median) / x;
9-
if (c !== (c | 0)) return -1;
10-
res += c;
5+
if (nums.some(num => num % x !== mod)) {
6+
return -1;
117
}
128

13-
return res;
14-
}
9+
nums.sort((a, b) => a - b);
10+
const mid = nums[Math.floor(nums.length / 2)];
11+
return nums.reduce((ans, num) => ans + Math.abs(num - mid) / x, 0);
12+
};

0 commit comments

Comments
 (0)