Skip to content

Commit 38b5c48

Browse files
committed
feat: add solutions to lc problem: No.1144
No.1144.Decrease Elements To Make Array Zigzag
1 parent 200907b commit 38b5c48

File tree

6 files changed

+257
-9
lines changed

6 files changed

+257
-9
lines changed

solution/1100-1199/1144.Decrease Elements To Make Array Zigzag/README.md

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,115 @@
4545

4646
<!-- 这里可写通用的实现逻辑 -->
4747

48+
**方法一:枚举**
49+
50+
分别枚举偶数位和奇数位作为“比相邻元素小”的元素,然后计算需要的操作次数。取两者的最小值即可。
51+
52+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 `nums` 的长度。
53+
4854
<!-- tabs:start -->
4955

5056
### **Python3**
5157

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

5460
```python
55-
61+
class Solution:
62+
def movesToMakeZigzag(self, nums: List[int]) -> int:
63+
ans = [0, 0]
64+
n = len(nums)
65+
for i in range(2):
66+
for j in range(i, n, 2):
67+
d = 0
68+
if j:
69+
d = max(d, nums[j] - nums[j - 1] + 1)
70+
if j < n - 1:
71+
d = max(d, nums[j] - nums[j + 1] + 1)
72+
ans[i] += d
73+
return min(ans)
5674
```
5775

5876
### **Java**
5977

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

6280
```java
81+
class Solution {
82+
public int movesToMakeZigzag(int[] nums) {
83+
int[] ans = new int[2];
84+
int n = nums.length;
85+
for (int i = 0; i < 2; ++i) {
86+
for (int j = i; j < n; j += 2) {
87+
int d = 0;
88+
if (j > 0) {
89+
d = Math.max(d, nums[j] - nums[j - 1] + 1);
90+
}
91+
if (j < n - 1) {
92+
d = Math.max(d, nums[j] - nums[j + 1] + 1);
93+
}
94+
ans[i] += d;
95+
}
96+
}
97+
return Math.min(ans[0], ans[1]);
98+
}
99+
}
100+
```
101+
102+
### **C++**
103+
104+
```cpp
105+
class Solution {
106+
public:
107+
int movesToMakeZigzag(vector<int>& nums) {
108+
vector<int> ans(2);
109+
int n = nums.size();
110+
for (int i = 0; i < 2; ++i) {
111+
for (int j = i; j < n; j += 2) {
112+
int d = 0;
113+
if (j) d = max(d, nums[j] - nums[j - 1] + 1);
114+
if (j < n - 1) d = max(d, nums[j] - nums[j + 1] + 1);
115+
ans[i] += d;
116+
}
117+
}
118+
return min(ans[0], ans[1]);
119+
}
120+
};
121+
```
63122
123+
### **Go**
124+
125+
```go
126+
func movesToMakeZigzag(nums []int) int {
127+
ans := make([]int, 2)
128+
n := len(nums)
129+
for i := 0; i < 2; i++ {
130+
for j := i; j < n; j += 2 {
131+
d := 0
132+
if j > 0 {
133+
d = max(d, nums[j]-nums[j-1]+1)
134+
}
135+
if j < n-1 {
136+
d = max(d, nums[j]-nums[j+1]+1)
137+
}
138+
ans[i] += d
139+
}
140+
}
141+
return min(ans[0], ans[1])
142+
}
143+
144+
func max(a, b int) int {
145+
if a > b {
146+
return a
147+
}
148+
return b
149+
}
150+
151+
func min(a, b int) int {
152+
if a < b {
153+
return a
154+
}
155+
return b
156+
}
64157
```
65158

66159
### **...**

solution/1100-1199/1144.Decrease Elements To Make Array Zigzag/README_EN.md

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,100 @@
4646
### **Python3**
4747

4848
```python
49-
49+
class Solution:
50+
def movesToMakeZigzag(self, nums: List[int]) -> int:
51+
ans = [0, 0]
52+
n = len(nums)
53+
for i in range(2):
54+
for j in range(i, n, 2):
55+
d = 0
56+
if j:
57+
d = max(d, nums[j] - nums[j - 1] + 1)
58+
if j < n - 1:
59+
d = max(d, nums[j] - nums[j + 1] + 1)
60+
ans[i] += d
61+
return min(ans)
5062
```
5163

5264
### **Java**
5365

5466
```java
67+
class Solution {
68+
public int movesToMakeZigzag(int[] nums) {
69+
int[] ans = new int[2];
70+
int n = nums.length;
71+
for (int i = 0; i < 2; ++i) {
72+
for (int j = i; j < n; j += 2) {
73+
int d = 0;
74+
if (j > 0) {
75+
d = Math.max(d, nums[j] - nums[j - 1] + 1);
76+
}
77+
if (j < n - 1) {
78+
d = Math.max(d, nums[j] - nums[j + 1] + 1);
79+
}
80+
ans[i] += d;
81+
}
82+
}
83+
return Math.min(ans[0], ans[1]);
84+
}
85+
}
86+
```
87+
88+
### **C++**
89+
90+
```cpp
91+
class Solution {
92+
public:
93+
int movesToMakeZigzag(vector<int>& nums) {
94+
vector<int> ans(2);
95+
int n = nums.size();
96+
for (int i = 0; i < 2; ++i) {
97+
for (int j = i; j < n; j += 2) {
98+
int d = 0;
99+
if (j) d = max(d, nums[j] - nums[j - 1] + 1);
100+
if (j < n - 1) d = max(d, nums[j] - nums[j + 1] + 1);
101+
ans[i] += d;
102+
}
103+
}
104+
return min(ans[0], ans[1]);
105+
}
106+
};
107+
```
55108
109+
### **Go**
110+
111+
```go
112+
func movesToMakeZigzag(nums []int) int {
113+
ans := make([]int, 2)
114+
n := len(nums)
115+
for i := 0; i < 2; i++ {
116+
for j := i; j < n; j += 2 {
117+
d := 0
118+
if j > 0 {
119+
d = max(d, nums[j]-nums[j-1]+1)
120+
}
121+
if j < n-1 {
122+
d = max(d, nums[j]-nums[j+1]+1)
123+
}
124+
ans[i] += d
125+
}
126+
}
127+
return min(ans[0], ans[1])
128+
}
129+
130+
func max(a, b int) int {
131+
if a > b {
132+
return a
133+
}
134+
return b
135+
}
136+
137+
func min(a, b int) int {
138+
if a < b {
139+
return a
140+
}
141+
return b
142+
}
56143
```
57144

58145
### **...**
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int movesToMakeZigzag(vector<int>& nums) {
4+
vector<int> ans(2);
5+
int n = nums.size();
6+
for (int i = 0; i < 2; ++i) {
7+
for (int j = i; j < n; j += 2) {
8+
int d = 0;
9+
if (j) d = max(d, nums[j] - nums[j - 1] + 1);
10+
if (j < n - 1) d = max(d, nums[j] - nums[j + 1] + 1);
11+
ans[i] += d;
12+
}
13+
}
14+
return min(ans[0], ans[1]);
15+
}
16+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
func movesToMakeZigzag(nums []int) int {
2+
ans := make([]int, 2)
3+
n := len(nums)
4+
for i := 0; i < 2; i++ {
5+
for j := i; j < n; j += 2 {
6+
d := 0
7+
if j > 0 {
8+
d = max(d, nums[j]-nums[j-1]+1)
9+
}
10+
if j < n-1 {
11+
d = max(d, nums[j]-nums[j+1]+1)
12+
}
13+
ans[i] += d
14+
}
15+
}
16+
return min(ans[0], ans[1])
17+
}
18+
19+
func max(a, b int) int {
20+
if a > b {
21+
return a
22+
}
23+
return b
24+
}
25+
26+
func min(a, b int) int {
27+
if a < b {
28+
return a
29+
}
30+
return b
31+
}
Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
class Solution {
22
public int movesToMakeZigzag(int[] nums) {
3-
int[] res = new int[2];
4-
for (int i = 0, n = nums.length; i < n; ++i) {
5-
int left = i > 0 ? nums[i - 1] : Integer.MAX_VALUE;
6-
int right = i + 1 < n ? nums[i + 1] : Integer.MAX_VALUE;
7-
res[i & 1] += Math.max(0, nums[i] - (Math.min(left, right) - 1));
3+
int[] ans = new int[2];
4+
int n = nums.length;
5+
for (int i = 0; i < 2; ++i) {
6+
for (int j = i; j < n; j += 2) {
7+
int d = 0;
8+
if (j > 0) {
9+
d = Math.max(d, nums[j] - nums[j - 1] + 1);
10+
}
11+
if (j < n - 1) {
12+
d = Math.max(d, nums[j] - nums[j + 1] + 1);
13+
}
14+
ans[i] += d;
15+
}
816
}
9-
return Math.min(res[0], res[1]);
17+
return Math.min(ans[0], ans[1]);
1018
}
11-
}
19+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def movesToMakeZigzag(self, nums: List[int]) -> int:
3+
ans = [0, 0]
4+
n = len(nums)
5+
for i in range(2):
6+
for j in range(i, n, 2):
7+
d = 0
8+
if j:
9+
d = max(d, nums[j] - nums[j - 1] + 1)
10+
if j < n - 1:
11+
d = max(d, nums[j] - nums[j + 1] + 1)
12+
ans[i] += d
13+
return min(ans)

0 commit comments

Comments
 (0)