1243. Array Transformation
Если задан исходный tableau arr, то каждый день вы создаете новый tableau, используя tableau предыдущего дня. В i-й день вы выполняете следующие операции над tableauом дня i-1, чтобы получить tableau дня i: если element меньше своего левого и правого соседа, то этот element увеличивается. Если element больше своего левого и правого соседа, то этот element уменьшается. Первый и последний elementы никогда не меняются. Через несколько дней tableau не меняется. return этот окончательный tableau.
Exemple:
Input: arr = [6,2,3,4]
Output: [6,3,3,4]
C# solution
correspondant/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++ solution
brouillon automatique, à relire avant soumission#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 solution
correspondant/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 solution
correspondant/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 solution
correspondant/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
Инициализация нового tableauа с такими же значениями, как у исходного tableauа.
Циклически изменяем tableau в соответствии с правилами, пока он не перестанет меняться.
Для каждого elementа tableauа проверяем, изменяется ли он в зависимости от его левого и правого соседей.
Если element меньше своего левого и правого соседей, увеличиваем его.
Если element больше своего левого и правого соседей, уменьшаем его.
Первый и последний elementы tableauа остаются неизменными.
😎
Vacancies for this task
offres actives with overlapping task tags are affichés.