Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cca8a3e

Browse files
committed
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‎

Lines changed: 78 additions & 2 deletions
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 1
35+
```
36+
37+
实际上,v 与 mi 存在着这样的关系:
38+
39+
```
40+
v = mi + k 2
41+
```
42+
43+
这是因为,最小的数每次都会被增加,直至变成 v。因此,如果最终数字是 v,那么操作的次数 `k = v - mi`
44+
45+
整合 12,可得
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‎

Lines changed: 56 additions & 2 deletions
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
### **...**
Lines changed: 13 additions & 0 deletions
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+
};
Lines changed: 12 additions & 0 deletions
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+
}
Lines changed: 3 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /