Skip to content

Commit e93d67a

Browse files
committed
feat: add solutions to lc problems: No.2169,2170
* No.2169.Count Operations to Obtain Zero * No.2170.Minimum Operations to Make the Array Alternating
1 parent b923fe9 commit e93d67a

File tree

12 files changed

+535
-6
lines changed

12 files changed

+535
-6
lines changed

solution/2100-2199/2169.Count Operations to Obtain Zero/README.md

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,45 @@
5454

5555
<!-- 这里可写通用的实现逻辑 -->
5656

57+
模拟相减。
58+
5759
<!-- tabs:start -->
5860

5961
### **Python3**
6062

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

6365
```python
64-
66+
class Solution:
67+
def countOperations(self, num1: int, num2: int) -> int:
68+
ans = 0
69+
while num1 and num2:
70+
if num1 >= num2:
71+
num1, num2 = num2, num1
72+
num2 -= num1
73+
ans += 1
74+
return ans
6575
```
6676

6777
### **Java**
6878

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

7181
```java
72-
82+
class Solution {
83+
public int countOperations(int num1, int num2) {
84+
int ans = 0;
85+
while (num1 != 0 && num2 != 0) {
86+
if (num1 >= num2) {
87+
num1 -= num2;
88+
} else {
89+
num2 -= num1;
90+
}
91+
++ans;
92+
}
93+
return ans;
94+
}
95+
}
7396
```
7497

7598
### **TypeScript**
@@ -85,6 +108,40 @@ function countOperations(num1: number, num2: number): number {
85108
}
86109
```
87110

111+
### **C++**
112+
113+
```cpp
114+
class Solution {
115+
public:
116+
int countOperations(int num1, int num2) {
117+
int ans = 0;
118+
while (num1 && num2)
119+
{
120+
if (num1 > num2) swap(num1, num2);
121+
num2 -= num1;
122+
++ans;
123+
}
124+
return ans;
125+
}
126+
};
127+
```
128+
129+
### **Go**
130+
131+
```go
132+
func countOperations(num1 int, num2 int) int {
133+
ans := 0
134+
for num1 != 0 && num2 != 0 {
135+
if num1 > num2 {
136+
num1, num2 = num2, num1
137+
}
138+
num2 -= num1
139+
ans++
140+
}
141+
return ans
142+
}
143+
```
144+
88145
### **...**
89146

90147
```

solution/2100-2199/2169.Count Operations to Obtain Zero/README_EN.md

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,34 @@ So the total number of operations required is 1.
5353
### **Python3**
5454

5555
```python
56-
56+
class Solution:
57+
def countOperations(self, num1: int, num2: int) -> int:
58+
ans = 0
59+
while num1 and num2:
60+
if num1 >= num2:
61+
num1, num2 = num2, num1
62+
num2 -= num1
63+
ans += 1
64+
return ans
5765
```
5866

5967
### **Java**
6068

6169
```java
62-
70+
class Solution {
71+
public int countOperations(int num1, int num2) {
72+
int ans = 0;
73+
while (num1 != 0 && num2 != 0) {
74+
if (num1 >= num2) {
75+
num1 -= num2;
76+
} else {
77+
num2 -= num1;
78+
}
79+
++ans;
80+
}
81+
return ans;
82+
}
83+
}
6384
```
6485

6586
### **TypeScript**
@@ -75,6 +96,40 @@ function countOperations(num1: number, num2: number): number {
7596
}
7697
```
7798

99+
### **C++**
100+
101+
```cpp
102+
class Solution {
103+
public:
104+
int countOperations(int num1, int num2) {
105+
int ans = 0;
106+
while (num1 && num2)
107+
{
108+
if (num1 > num2) swap(num1, num2);
109+
num2 -= num1;
110+
++ans;
111+
}
112+
return ans;
113+
}
114+
};
115+
```
116+
117+
### **Go**
118+
119+
```go
120+
func countOperations(num1 int, num2 int) int {
121+
ans := 0
122+
for num1 != 0 && num2 != 0 {
123+
if num1 > num2 {
124+
num1, num2 = num2, num1
125+
}
126+
num2 -= num1
127+
ans++
128+
}
129+
return ans
130+
}
131+
```
132+
78133
### **...**
79134

80135
```
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 countOperations(int num1, int num2) {
4+
int ans = 0;
5+
while (num1 && num2)
6+
{
7+
if (num1 > num2) swap(num1, num2);
8+
num2 -= num1;
9+
++ans;
10+
}
11+
return ans;
12+
}
13+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
func countOperations(num1 int, num2 int) int {
2+
ans := 0
3+
for num1 != 0 && num2 != 0 {
4+
if num1 > num2 {
5+
num1, num2 = num2, num1
6+
}
7+
num2 -= num1
8+
ans++
9+
}
10+
return ans
11+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public int countOperations(int num1, int num2) {
3+
int ans = 0;
4+
while (num1 != 0 && num2 != 0) {
5+
if (num1 >= num2) {
6+
num1 -= num2;
7+
} else {
8+
num2 -= num1;
9+
}
10+
++ans;
11+
}
12+
return ans;
13+
}
14+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def countOperations(self, num1: int, num2: int) -> int:
3+
ans = 0
4+
while num1 and num2:
5+
if num1 >= num2:
6+
num1, num2 = num2, num1
7+
num2 -= num1
8+
ans += 1
9+
return ans

solution/2100-2199/2170.Minimum Operations to Make the Array Alternating/README.md

Lines changed: 127 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,68 @@
6262
<!-- 这里可写当前语言的特殊实现逻辑 -->
6363

6464
```python
65-
65+
class Solution:
66+
def minimumOperations(self, nums: List[int]) -> int:
67+
def get(i):
68+
c = Counter(nums[i::2]).most_common(2)
69+
if not c:
70+
return [(0, 0), (0, 0)]
71+
if len(c) == 1:
72+
return [c[0], (0, 0)]
73+
return c
74+
75+
n = len(nums)
76+
return min(n - (n1 + n2) for a, n1 in get(0) for b, n2 in get(1) if a != b)
6677
```
6778

6879
### **Java**
6980

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

7283
```java
84+
class Solution {
85+
private int[] nums;
86+
private int n;
87+
88+
public int minimumOperations(int[] nums) {
89+
this.nums = nums;
90+
n = nums.length;
91+
int ans = Integer.MAX_VALUE;
92+
for (int[] e1 : get(0)) {
93+
for (int[] e2 : get(1)) {
94+
if (e1[0] != e2[0]) {
95+
ans = Math.min(ans, n - (e1[1] + e2[1]));
96+
}
97+
}
98+
}
99+
return ans;
100+
}
73101

102+
private int[][] get(int i) {
103+
Map<Integer, Integer> freq = new HashMap<>();
104+
for (; i < n; i += 2) {
105+
freq.put(nums[i], freq.getOrDefault(nums[i], 0) + 1);
106+
}
107+
int a = 0;
108+
int n1 = 0;
109+
int b = 0;
110+
int n2 = 0;
111+
for (Map.Entry<Integer, Integer> e : freq.entrySet()) {
112+
int k = e.getKey();
113+
int v = e.getValue();
114+
if (v > n1) {
115+
b = a;
116+
n2 = n1;
117+
a = k;
118+
n1 = v;
119+
} else if (v > n2) {
120+
b = k;
121+
n2 = v;
122+
}
123+
}
124+
return new int[][]{{a, n1}, {b, n2}};
125+
}
126+
}
74127
```
75128

76129
### **TypeScript**
@@ -104,6 +157,79 @@ function minimumOperations(nums: number[]): number {
104157
}
105158
```
106159

160+
### **C++**
161+
162+
```cpp
163+
typedef pair<int, int> PII;
164+
165+
class Solution {
166+
public:
167+
int minimumOperations(vector<int>& nums) {
168+
int ans = INT_MAX;
169+
int n = nums.size();
170+
for (auto& [a, n1] : get(0, nums))
171+
for (auto& [b, n2] : get(1, nums))
172+
if (a != b)
173+
ans = min(ans, n - (n1 + n2));
174+
return ans;
175+
}
176+
177+
vector<PII> get(int i, vector<int>& nums) {
178+
unordered_map<int, int> freq;
179+
for (; i < nums.size(); i += 2) ++freq[nums[i]];
180+
int a = 0, n1 = 0, b = 0, n2 = 0;
181+
for (auto& [k, v] : freq)
182+
{
183+
if (v > n1)
184+
{
185+
b = a;
186+
n2 = n1;
187+
a = k;
188+
n1 = v;
189+
}
190+
else if (v > n2)
191+
{
192+
b = k;
193+
n2 = v;
194+
}
195+
}
196+
return {{a, n1}, {b, n2}};
197+
}
198+
};
199+
```
200+
201+
### **Go**
202+
203+
```go
204+
func minimumOperations(nums []int) int {
205+
n := len(nums)
206+
get := func(i int) [][]int {
207+
freq := make(map[int]int)
208+
for ; i < n; i += 2 {
209+
freq[nums[i]]++
210+
}
211+
a, n1, b, n2 := 0, 0, 0, 0
212+
for k, v := range freq {
213+
if v > n1 {
214+
b, n2, a, n1 = a, n1, k, v
215+
} else if v > n2 {
216+
b, n2 = k, v
217+
}
218+
}
219+
return [][]int{{a, n1}, {b, n2}}
220+
}
221+
ans := 100000
222+
for _, e1 := range get(0) {
223+
for _, e2 := range get(1) {
224+
if e1[0] != e2[0] && ans > (n-(e1[1]+e2[1])) {
225+
ans = n - (e1[1] + e2[1])
226+
}
227+
}
228+
}
229+
return ans
230+
}
231+
```
232+
107233
### **...**
108234

109235
```

0 commit comments

Comments
 (0)