1243. Array Transformation

LeetCode easy original: C# #array #csharp #easy #leetcode
El texto de la tarea se traduce del ruso para el idioma seleccionado. El código no cambia.

Если задан исходный 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/original
using 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/original
import 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/original
def 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/original
func 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.

Todas las vacantes
Todavía no hay vacantes activas.