1243. Array Transformation
Если задан исходный arreglo arr, то каждый день вы создаете новый arreglo, используя arreglo предыдущего дня. В i-й день вы выполняете следующие операции над arregloом дня i-1, чтобы получить arreglo дня i: если element меньше своего левого и правого соседа, то этот element увеличивается. Если element больше своего левого и правого соседа, то этот element уменьшается. Первый и последний elementы никогда не меняются. Через несколько дней arreglo не меняется. return этот окончательный arreglo.
Ejemplo:
Input: arr = [6,2,3,4]
Output: [6,3,3,4]
C# solución
coincidente/originalusing System;
using System.Collections.Generic;
public class Solution {
public int[] TransformArray(int[] arr) {
bool changed;
do {
changed = false;
int[] newArr = (int[])arr.Clone();
for (int i = 1; i < arr.Length - 1; i++) {
if (arr[i] < arr[i - 1] && arr[i] < arr[i + 1]) {
newArr[i]++;
changed = true;
} else if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1]) {
newArr[i]--;
changed = true;
}
}
arr = newArr;
} while (changed);
return arr;
}
}
C++ solución
borrador automático, revisar antes de enviar#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public vector<int>& TransformArray(vector<int>& arr) {
bool changed;
do {
changed = false;
vector<int>& newArr = (int[])arr.Clone();
for (int i = 1; i < arr.size() - 1; i++) {
if (arr[i] < arr[i - 1] && arr[i] < arr[i + 1]) {
newArr[i]++;
changed = true;
} else if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1]) {
newArr[i]--;
changed = true;
}
}
arr = newArr;
} while (changed);
return arr;
}
}
Java solución
coincidente/originalimport java.util.Arrays;
public class Solution {
public int[] transformArray(int[] arr) {
boolean changed;
do {
changed = false;
int[] newArr = arr.clone();
for (int i = 1; i < arr.length - 1; i++) {
if (arr[i] < arr[i - 1] && arr[i] < arr[i + 1]) {
newArr[i]++;
changed = true;
} else if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1]) {
newArr[i]--;
changed = true;
}
}
Python solución
coincidente/originaldef transformArray(arr):
while True:
new_arr = arr[:]
changed = False
for i in range(1, len(arr) - 1):
if arr[i] < arr[i - 1] and arr[i] < arr[i + 1]:
new_arr[i] += 1
changed = True
elif arr[i] > arr[i - 1] and arr[i] > arr[i + 1]:
new_arr[i] -= 1
changed = True
if not changed:
break
arr = new_arr
return arr
Go solución
coincidente/originalfunc transformArray(arr []int) []int {
changed := true
for changed {
changed = false
newArr := make([]int, len(arr))
copy(newArr, arr)
for i := 1; i < len(arr)-1; i++ {
if arr[i] < arr[i-1] && arr[i] < arr[i+1] {
newArr[i]++
changed = true
} else if arr[i] > arr[i-1] && arr[i] > arr[i+1] {
newArr[i]--
changed = true
}
}
arr = newArr
}
return arr
}
Algorithm
Инициализация нового arregloа с такими же значениями, как у исходного arregloа.
Циклически изменяем arreglo в соответствии с правилами, пока он не перестанет меняться.
Для каждого elementа arregloа проверяем, изменяется ли он в зависимости от его левого и правого соседей.
Если element меньше своего левого и правого соседей, увеличиваем его.
Если element больше своего левого и правого соседей, уменьшаем его.
Первый и последний elementы arregloа остаются неизменными.
😎
Vacantes para esta tarea
Se muestran vacantes activas con etiquetas coincidentes.