Skip to content

Commit 7425540

Browse files
committed
feat: add solutions to lc problem: No.0462
No.0462.Minimum Moves to Equal Array Elements II
1 parent 0e6ca10 commit 7425540

File tree

6 files changed

+173
-6
lines changed

6 files changed

+173
-6
lines changed

solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/README.md

+71
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,93 @@
2727

2828
<!-- 这里可写通用的实现逻辑 -->
2929

30+
**方法一:排序 + 中位数**
31+
32+
**方法二:排序 + 前缀和**
33+
34+
以上两种方法的时间复杂度均为 O(nlogn)。
35+
3036
<!-- tabs:start -->
3137

3238
### **Python3**
3339

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

3642
```python
43+
class Solution:
44+
def minMoves2(self, nums: List[int]) -> int:
45+
nums.sort()
46+
k = nums[len(nums) >> 1]
47+
return sum(abs(v - k) for v in nums)
48+
```
3749

50+
```python
51+
class Solution:
52+
def minMoves2(self, nums: List[int]) -> int:
53+
def move(i):
54+
v = nums[i]
55+
a = v * i - s[i]
56+
b = s[-1] - s[i + 1] - v * (n - i - 1)
57+
return a + b
58+
59+
nums.sort()
60+
s = [0] + list(accumulate(nums))
61+
n = len(nums)
62+
return min(move(i) for i in range(n))
3863
```
3964

4065
### **Java**
4166

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

4469
```java
70+
class Solution {
71+
public int minMoves2(int[] nums) {
72+
Arrays.sort(nums);
73+
int k = nums[nums.length >> 1];
74+
int ans = 0;
75+
for (int v : nums) {
76+
ans += Math.abs(v - k);
77+
}
78+
return ans;
79+
}
80+
}
81+
```
82+
83+
### **C++**
84+
85+
```cpp
86+
class Solution {
87+
public:
88+
int minMoves2(vector<int>& nums) {
89+
sort(nums.begin(), nums.end());
90+
int k = nums[nums.size() >> 1];
91+
int ans = 0;
92+
for (int& v : nums) ans += abs(v - k);
93+
return ans;
94+
}
95+
};
96+
```
4597
98+
### **Go**
99+
100+
```go
101+
func minMoves2(nums []int) int {
102+
sort.Ints(nums)
103+
k := nums[len(nums)>>1]
104+
ans := 0
105+
for _, v := range nums {
106+
ans += abs(v - k)
107+
}
108+
return ans
109+
}
110+
111+
func abs(x int) int {
112+
if x < 0 {
113+
return -x
114+
}
115+
return x
116+
}
46117
```
47118

48119
### **...**

solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/README_EN.md

+65
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,78 @@ Only two moves are needed (remember each move increments or decrements one eleme
4444
### **Python3**
4545

4646
```python
47+
class Solution:
48+
def minMoves2(self, nums: List[int]) -> int:
49+
nums.sort()
50+
k = nums[len(nums) >> 1]
51+
return sum(abs(v - k) for v in nums)
52+
```
4753

54+
```python
55+
class Solution:
56+
def minMoves2(self, nums: List[int]) -> int:
57+
def move(i):
58+
v = nums[i]
59+
a = v * i - s[i]
60+
b = s[-1] - s[i + 1] - v * (n - i - 1)
61+
return a + b
62+
63+
nums.sort()
64+
s = [0] + list(accumulate(nums))
65+
n = len(nums)
66+
return min(move(i) for i in range(n))
4867
```
4968

5069
### **Java**
5170

5271
```java
72+
class Solution {
73+
public int minMoves2(int[] nums) {
74+
Arrays.sort(nums);
75+
int k = nums[nums.length >> 1];
76+
int ans = 0;
77+
for (int v : nums) {
78+
ans += Math.abs(v - k);
79+
}
80+
return ans;
81+
}
82+
}
83+
```
84+
85+
### **C++**
86+
87+
```cpp
88+
class Solution {
89+
public:
90+
int minMoves2(vector<int>& nums) {
91+
sort(nums.begin(), nums.end());
92+
int k = nums[nums.size() >> 1];
93+
int ans = 0;
94+
for (int& v : nums) ans += abs(v - k);
95+
return ans;
96+
}
97+
};
98+
```
5399
100+
### **Go**
101+
102+
```go
103+
func minMoves2(nums []int) int {
104+
sort.Ints(nums)
105+
k := nums[len(nums)>>1]
106+
ans := 0
107+
for _, v := range nums {
108+
ans += abs(v - k)
109+
}
110+
return ans
111+
}
112+
113+
func abs(x int) int {
114+
if x < 0 {
115+
return -x
116+
}
117+
return x
118+
}
54119
```
55120

56121
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution {
2+
public:
3+
int minMoves2(vector<int>& nums) {
4+
sort(nums.begin(), nums.end());
5+
int k = nums[nums.size() >> 1];
6+
int ans = 0;
7+
for (int& v : nums) ans += abs(v - k);
8+
return ans;
9+
}
10+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
func minMoves2(nums []int) int {
2+
sort.Ints(nums)
3+
k := nums[len(nums)>>1]
4+
ans := 0
5+
for _, v := range nums {
6+
ans += abs(v - k)
7+
}
8+
return ans
9+
}
10+
11+
func abs(x int) int {
12+
if x < 0 {
13+
return -x
14+
}
15+
return x
16+
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
class Solution {
22
public int minMoves2(int[] nums) {
33
Arrays.sort(nums);
4-
int k = nums[nums.length / 2];
5-
int res = 0;
6-
for (int num : nums) {
7-
res += Math.abs(num - k);
4+
int k = nums[nums.length >> 1];
5+
int ans = 0;
6+
for (int v : nums) {
7+
ans += Math.abs(v - k);
88
}
9-
return res;
9+
return ans;
1010
}
11-
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class Solution:
2+
def minMoves2(self, nums: List[int]) -> int:
3+
nums.sort()
4+
k = nums[len(nums) >> 1]
5+
return sum(abs(v - k) for v in nums)

0 commit comments

Comments
 (0)