Skip to content

Commit 6ffd3b2

Browse files
committed
feat: add solutions to lc problem: No.1243
No.1243.Array Transformation
1 parent ca10516 commit 6ffd3b2

File tree

6 files changed

+221
-81
lines changed

6 files changed

+221
-81
lines changed

solution/1200-1299/1243.Array Transformation/README.md

Lines changed: 81 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@
5252

5353
<!-- 这里可写通用的实现逻辑 -->
5454

55+
**方法一:模拟**
56+
57+
每次模拟一天,对于每个元素,如果它大于左右邻居,则自减 1,否则自增 1。如果数组在某一天不再发生变化,则返回该数组。
58+
59+
时间复杂度 $O(n \times m)$,空间复杂度 $O(n)$。其中 $n$ 和 $m$ 分别为数组长度和数组元素的最大值。
60+
5561
<!-- tabs:start -->
5662

5763
### **Python3**
@@ -61,18 +67,17 @@
6167
```python
6268
class Solution:
6369
def transformArray(self, arr: List[int]) -> List[int]:
64-
copy = [e for e in arr]
65-
has_change, n = True, len(arr)
66-
while has_change:
67-
has_change = False
68-
for i in range(1, n - 1):
69-
if arr[i] < copy[i - 1] and arr[i] < copy[i + 1]:
70-
arr[i] += 1
71-
has_change = True
72-
elif arr[i] > copy[i - 1] and arr[i] > copy[i + 1]:
70+
f = True
71+
while f:
72+
f = False
73+
t = arr[:]
74+
for i in range(1, len(t) - 1):
75+
if t[i] > t[i - 1] and t[i] > t[i + 1]:
7376
arr[i] -= 1
74-
has_change = True
75-
copy = [e for e in arr]
77+
f = True
78+
if t[i] < t[i - 1] and t[i] < t[i + 1]:
79+
arr[i] += 1
80+
f = True
7681
return arr
7782
```
7883

@@ -83,28 +88,77 @@ class Solution:
8388
```java
8489
class Solution {
8590
public List<Integer> transformArray(int[] arr) {
86-
int n = arr.length;
87-
int[] copy = Arrays.copyOf(arr, n);
88-
boolean hasChange = true;
89-
while (hasChange) {
90-
hasChange = false;
91-
for (int i = 1; i < n - 1; ++i) {
92-
if (arr[i] < copy[i - 1] && arr[i] < copy[i + 1]) {
93-
++arr[i];
94-
hasChange = true;
95-
} else if (arr[i] > copy[i - 1] && arr[i] > copy[i + 1]) {
91+
boolean f = true;
92+
while (f) {
93+
f = false;
94+
int[] t = arr.clone();
95+
for (int i = 1; i < t.length - 1; ++i) {
96+
if (t[i] > t[i - 1] && t[i] > t[i + 1]) {
9697
--arr[i];
97-
hasChange = true;
98+
f = true;
99+
}
100+
if (t[i] < t[i - 1] && t[i] < t[i + 1]) {
101+
++arr[i];
102+
f = true;
98103
}
99104
}
100-
System.arraycopy(arr, 0, copy, 0, n);
101105
}
102-
List<Integer> res = new ArrayList<>();
103-
for (int e : arr) {
104-
res.add(e);
106+
List<Integer> ans = new ArrayList<>();
107+
for (int x : arr) {
108+
ans.add(x);
109+
}
110+
return ans;
111+
}
112+
}
113+
```
114+
115+
### **C++**
116+
117+
```cpp
118+
class Solution {
119+
public:
120+
vector<int> transformArray(vector<int>& arr) {
121+
bool f = true;
122+
while (f) {
123+
f = false;
124+
vector<int> t = arr;
125+
for (int i = 1; i < arr.size() - 1; ++i) {
126+
if (t[i] > t[i - 1] && t[i] > t[i + 1]) {
127+
--arr[i];
128+
f = true;
129+
}
130+
if (t[i] < t[i - 1] && t[i] < t[i + 1]) {
131+
++arr[i];
132+
f = true;
133+
}
134+
}
105135
}
106-
return res;
136+
return arr;
107137
}
138+
};
139+
```
140+
141+
### **Go**
142+
143+
```go
144+
func transformArray(arr []int) []int {
145+
f := true
146+
for f {
147+
f = false
148+
t := make([]int, len(arr))
149+
copy(t, arr)
150+
for i := 1; i < len(arr)-1; i++ {
151+
if t[i] > t[i-1] && t[i] > t[i+1] {
152+
arr[i]--
153+
f = true
154+
}
155+
if t[i] < t[i-1] && t[i] < t[i+1] {
156+
arr[i]++
157+
f = true
158+
}
159+
}
160+
}
161+
return arr
108162
}
109163
```
110164

solution/1200-1299/1243.Array Transformation/README_EN.md

Lines changed: 75 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,17 @@ No more operations can be done to this array.
5555
```python
5656
class Solution:
5757
def transformArray(self, arr: List[int]) -> List[int]:
58-
copy = [e for e in arr]
59-
has_change, n = True, len(arr)
60-
while has_change:
61-
has_change = False
62-
for i in range(1, n - 1):
63-
if arr[i] < copy[i - 1] and arr[i] < copy[i + 1]:
64-
arr[i] += 1
65-
has_change = True
66-
elif arr[i] > copy[i - 1] and arr[i] > copy[i + 1]:
58+
f = True
59+
while f:
60+
f = False
61+
t = arr[:]
62+
for i in range(1, len(t) - 1):
63+
if t[i] > t[i - 1] and t[i] > t[i + 1]:
6764
arr[i] -= 1
68-
has_change = True
69-
copy = [e for e in arr]
65+
f = True
66+
if t[i] < t[i - 1] and t[i] < t[i + 1]:
67+
arr[i] += 1
68+
f = True
7069
return arr
7170
```
7271

@@ -75,31 +74,80 @@ class Solution:
7574
```java
7675
class Solution {
7776
public List<Integer> transformArray(int[] arr) {
78-
int n = arr.length;
79-
int[] copy = Arrays.copyOf(arr, n);
80-
boolean hasChange = true;
81-
while (hasChange) {
82-
hasChange = false;
83-
for (int i = 1; i < n - 1; ++i) {
84-
if (arr[i] < copy[i - 1] && arr[i] < copy[i + 1]) {
85-
++arr[i];
86-
hasChange = true;
87-
} else if (arr[i] > copy[i - 1] && arr[i] > copy[i + 1]) {
77+
boolean f = true;
78+
while (f) {
79+
f = false;
80+
int[] t = arr.clone();
81+
for (int i = 1; i < t.length - 1; ++i) {
82+
if (t[i] > t[i - 1] && t[i] > t[i + 1]) {
8883
--arr[i];
89-
hasChange = true;
84+
f = true;
85+
}
86+
if (t[i] < t[i - 1] && t[i] < t[i + 1]) {
87+
++arr[i];
88+
f = true;
9089
}
9190
}
92-
System.arraycopy(arr, 0, copy, 0, n);
9391
}
94-
List<Integer> res = new ArrayList<>();
95-
for (int e : arr) {
96-
res.add(e);
92+
List<Integer> ans = new ArrayList<>();
93+
for (int x : arr) {
94+
ans.add(x);
9795
}
98-
return res;
96+
return ans;
9997
}
10098
}
10199
```
102100

101+
### **C++**
102+
103+
```cpp
104+
class Solution {
105+
public:
106+
vector<int> transformArray(vector<int>& arr) {
107+
bool f = true;
108+
while (f) {
109+
f = false;
110+
vector<int> t = arr;
111+
for (int i = 1; i < arr.size() - 1; ++i) {
112+
if (t[i] > t[i - 1] && t[i] > t[i + 1]) {
113+
--arr[i];
114+
f = true;
115+
}
116+
if (t[i] < t[i - 1] && t[i] < t[i + 1]) {
117+
++arr[i];
118+
f = true;
119+
}
120+
}
121+
}
122+
return arr;
123+
}
124+
};
125+
```
126+
127+
### **Go**
128+
129+
```go
130+
func transformArray(arr []int) []int {
131+
f := true
132+
for f {
133+
f = false
134+
t := make([]int, len(arr))
135+
copy(t, arr)
136+
for i := 1; i < len(arr)-1; i++ {
137+
if t[i] > t[i-1] && t[i] > t[i+1] {
138+
arr[i]--
139+
f = true
140+
}
141+
if t[i] < t[i-1] && t[i] < t[i+1] {
142+
arr[i]++
143+
f = true
144+
}
145+
}
146+
}
147+
return arr
148+
}
149+
```
150+
103151
### **...**
104152

105153
```
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
vector<int> transformArray(vector<int>& arr) {
4+
bool f = true;
5+
while (f) {
6+
f = false;
7+
vector<int> t = arr;
8+
for (int i = 1; i < arr.size() - 1; ++i) {
9+
if (t[i] > t[i - 1] && t[i] > t[i + 1]) {
10+
--arr[i];
11+
f = true;
12+
}
13+
if (t[i] < t[i - 1] && t[i] < t[i + 1]) {
14+
++arr[i];
15+
f = true;
16+
}
17+
}
18+
}
19+
return arr;
20+
}
21+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
func transformArray(arr []int) []int {
2+
f := true
3+
for f {
4+
f = false
5+
t := make([]int, len(arr))
6+
copy(t, arr)
7+
for i := 1; i < len(arr)-1; i++ {
8+
if t[i] > t[i-1] && t[i] > t[i+1] {
9+
arr[i]--
10+
f = true
11+
}
12+
if t[i] < t[i-1] && t[i] < t[i+1] {
13+
arr[i]++
14+
f = true
15+
}
16+
}
17+
}
18+
return arr
19+
}
Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
11
class Solution {
22
public List<Integer> transformArray(int[] arr) {
3-
int n = arr.length;
4-
int[] copy = Arrays.copyOf(arr, n);
5-
boolean hasChange = true;
6-
while (hasChange) {
7-
hasChange = false;
8-
for (int i = 1; i < n - 1; ++i) {
9-
if (arr[i] < copy[i - 1] && arr[i] < copy[i + 1]) {
10-
++arr[i];
11-
hasChange = true;
12-
} else if (arr[i] > copy[i - 1] && arr[i] > copy[i + 1]) {
3+
boolean f = true;
4+
while (f) {
5+
f = false;
6+
int[] t = arr.clone();
7+
for (int i = 1; i < t.length - 1; ++i) {
8+
if (t[i] > t[i - 1] && t[i] > t[i + 1]) {
139
--arr[i];
14-
hasChange = true;
10+
f = true;
11+
}
12+
if (t[i] < t[i - 1] && t[i] < t[i + 1]) {
13+
++arr[i];
14+
f = true;
1515
}
1616
}
17-
System.arraycopy(arr, 0, copy, 0, n);
1817
}
19-
List<Integer> res = new ArrayList<>();
20-
for (int e : arr) {
21-
res.add(e);
18+
List<Integer> ans = new ArrayList<>();
19+
for (int x : arr) {
20+
ans.add(x);
2221
}
23-
return res;
22+
return ans;
2423
}
2524
}
Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
class Solution:
22
def transformArray(self, arr: List[int]) -> List[int]:
3-
copy = [e for e in arr]
4-
has_change, n = True, len(arr)
5-
while has_change:
6-
has_change = False
7-
for i in range(1, n - 1):
8-
if arr[i] < copy[i - 1] and arr[i] < copy[i + 1]:
9-
arr[i] += 1
10-
has_change = True
11-
elif arr[i] > copy[i - 1] and arr[i] > copy[i + 1]:
3+
f = True
4+
while f:
5+
f = False
6+
t = arr[:]
7+
for i in range(1, len(t) - 1):
8+
if t[i] > t[i - 1] and t[i] > t[i + 1]:
129
arr[i] -= 1
13-
has_change = True
14-
copy = [e for e in arr]
10+
f = True
11+
if t[i] < t[i - 1] and t[i] < t[i + 1]:
12+
arr[i] += 1
13+
f = True
1514
return arr

0 commit comments

Comments
 (0)