1243. Array Transformation

LeetCode easy original: C# #array #csharp #easy #leetcode
Văn bản bài toán được dịch từ tiếng Nga theo ngôn ngữ giao diện. Mã không thay đổi.

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

Ví dụ:

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

Output: [6,3,3,4]

C# lời giải

đã khớp/gốc
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ời giải

bản nháp tự động, xem lại trước khi gửi
#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ời giải

đã khớp/gốc
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ời giải

đã khớp/gốc
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ời giải

đã khớp/gốc
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

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

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

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

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

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

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

😎

Vacancies for this task

việc làm đang hoạt động with overlapping task tags are đã hiển thị.

Tất cả việc làm
Chưa có việc làm đang hoạt động.