1243. Array Transformation

LeetCode easy original: C# #array #csharp #easy #leetcode
Der Aufgabentext wird für die gewählte Sprache aus dem Russischen übersetzt. Code bleibt unverändert.

Если задан исходный Array arr, то каждый день вы создаете новый Array, используя Array предыдущего дня. В i-й день вы выполняете следующие операции над Arrayом дня i-1, чтобы получить Array дня i: если element меньше своего левого и правого соседа, то этот element увеличивается. Если element больше своего левого и правого соседа, то этот element уменьшается. Первый и последний elementы никогда не меняются. Через несколько дней Array не меняется. return этот окончательный Array.

Beispiel:

Input: arr = [6,2,3,4]

Output: [6,3,3,4]

C# Lösung

zugeordnet/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++ Lösung

Auto-Entwurf, vor dem Einreichen prüfen
#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 Lösung

zugeordnet/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 Lösung

zugeordnet/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 Lösung

zugeordnet/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

Инициализация нового Arrayа с такими же значениями, как у исходного Arrayа.

Циклически изменяем Array в соответствии с правилами, пока он не перестанет меняться.

Для каждого elementа Arrayа проверяем, изменяется ли он в зависимости от его левого и правого соседей.

Если element меньше своего левого и правого соседей, увеличиваем его.

Если element больше своего левого и правого соседей, уменьшаем его.

Первый и последний elementы Arrayа остаются неизменными.

😎

Stellen zu dieser Aufgabe

aktive Stellen with overlapping task tags are angezeigt.

Alle Stellen
Es gibt noch keine aktiven Stellen.