1243. Array Transformation

LeetCode easy original: C# #array #csharp #easy #leetcode
선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.

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

예제:

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

Output: [6,3,3,4]

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++ 해법

자동 초안, 제출 전 검토
#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 해법

매칭됨/원본
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 해법

매칭됨/원본
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 해법

매칭됨/원본
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

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

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

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

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

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

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

😎

Vacancies for this task

활성 채용 with overlapping task tags are 표시됨.

전체 채용
아직 활성 채용이 없습니다.