Skip to content

Commit cca8a3e

Browse files
committedOct 20, 2021
feat: add solutions to lc problem: No.0453
No.0453.Minimum Moves to Equal Array Elements
1 parent 657f425 commit cca8a3e

File tree

5 files changed

+162
-4
lines changed

5 files changed

+162
-4
lines changed
 

‎solution/0400-0499/0453.Minimum Moves to Equal Array Elements/README.md

+78-2
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,103 @@
2222
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
2323
</pre>
2424

25-
2625
## 解法
2726

2827
<!-- 这里可写通用的实现逻辑 -->
2928

29+
定义 s 表示数组元素之和,mi 表示数组中最小的元素,n 表示数组的长度,经过最小的 k 次操作过后,每个元素都变成 v。
30+
31+
那么:
32+
33+
```
34+
k * (n - 1) + s = v * n ①
35+
```
36+
37+
实际上,v 与 mi 存在着这样的关系:
38+
39+
```
40+
v = mi + k ②
41+
```
42+
43+
这是因为,最小的数每次都会被增加,直至变成 v。因此,如果最终数字是 v,那么操作的次数 `k = v - mi`
44+
45+
整合 ①②,可得
46+
47+
```
48+
k = s - mi * n
49+
```
50+
3051
<!-- tabs:start -->
3152

3253
### **Python3**
3354

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

3657
```python
37-
58+
class Solution:
59+
def minMoves(self, nums: List[int]) -> int:
60+
return sum(nums) - min(nums) * len(nums)
3861
```
3962

4063
### **Java**
4164

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

4467
```java
68+
class Solution {
69+
public int minMoves(int[] nums) {
70+
return Arrays.stream(nums).sum() - Arrays.stream(nums).min().getAsInt() * nums.length;
71+
}
72+
}
73+
```
74+
75+
```java
76+
class Solution {
77+
public int minMoves(int[] nums) {
78+
int s = 0;
79+
int mi = Integer.MAX_VALUE;
80+
for (int num : nums) {
81+
s += num;
82+
mi = Math.min(mi, num);
83+
}
84+
return s - mi * nums.length;
85+
}
86+
}
87+
```
88+
89+
### **C++**
90+
91+
```cpp
92+
class Solution {
93+
public:
94+
int minMoves(vector<int>& nums) {
95+
int s = 0;
96+
int mi = INT_MAX;
97+
for (int num : nums)
98+
{
99+
s += num;
100+
mi = min(mi, num);
101+
}
102+
return s - mi * nums.size();
103+
}
104+
};
105+
```
45106
107+
### **Go**
108+
109+
```go
110+
func minMoves(nums []int) int {
111+
mi := math.MaxInt32
112+
s := 0
113+
for _, num := range nums {
114+
s += num
115+
if num < mi {
116+
mi = num
117+
}
118+
}
119+
return s - mi*len(nums)
120+
121+
}
46122
```
47123

48124
### **...**

‎solution/0400-0499/0453.Minimum Moves to Equal Array Elements/README_EN.md

+56-2
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,75 @@
3434
<li><code>-10<sup>9</sup> &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
3535
</ul>
3636

37-
3837
## Solutions
3938

4039
<!-- tabs:start -->
4140

4241
### **Python3**
4342

4443
```python
45-
44+
class Solution:
45+
def minMoves(self, nums: List[int]) -> int:
46+
return sum(nums) - min(nums) * len(nums)
4647
```
4748

4849
### **Java**
4950

5051
```java
52+
class Solution {
53+
public int minMoves(int[] nums) {
54+
return Arrays.stream(nums).sum() - Arrays.stream(nums).min().getAsInt() * nums.length;
55+
}
56+
}
57+
```
58+
59+
```java
60+
class Solution {
61+
public int minMoves(int[] nums) {
62+
int s = 0;
63+
int mi = Integer.MAX_VALUE;
64+
for (int num : nums) {
65+
s += num;
66+
mi = Math.min(mi, num);
67+
}
68+
return s - mi * nums.length;
69+
}
70+
}
71+
```
72+
73+
### **C++**
74+
75+
```cpp
76+
class Solution {
77+
public:
78+
int minMoves(vector<int>& nums) {
79+
int s = 0;
80+
int mi = INT_MAX;
81+
for (int num : nums)
82+
{
83+
s += num;
84+
mi = min(mi, num);
85+
}
86+
return s - mi * nums.size();
87+
}
88+
};
89+
```
5190
91+
### **Go**
92+
93+
```go
94+
func minMoves(nums []int) int {
95+
mi := math.MaxInt32
96+
s := 0
97+
for _, num := range nums {
98+
s += num
99+
if num < mi {
100+
mi = num
101+
}
102+
}
103+
return s - mi*len(nums)
104+
105+
}
52106
```
53107

54108
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public:
3+
int minMoves(vector<int>& nums) {
4+
int s = 0;
5+
int mi = INT_MAX;
6+
for (int num : nums)
7+
{
8+
s += num;
9+
mi = min(mi, num);
10+
}
11+
return s - mi * nums.size();
12+
}
13+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
func minMoves(nums []int) int {
2+
mi := math.MaxInt32
3+
s := 0
4+
for _, num := range nums {
5+
s += num
6+
if num < mi {
7+
mi = num
8+
}
9+
}
10+
return s - mi*len(nums)
11+
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Solution:
2+
def minMoves(self, nums: List[int]) -> int:
3+
return sum(nums) - min(nums) * len(nums)

0 commit comments

Comments
 (0)