Skip to content

Latest commit

 

History

History
109 lines (87 loc) · 3.11 KB

File metadata and controls

109 lines (87 loc) · 3.11 KB

中文文档

Description

Given an initial array arr, every day you produce a new array using the array of the previous day.

On the i-th day, you do the following operations on the array of day i-1 to produce the array of day i:

  1. If an element is smaller than both its left neighbor and its right neighbor, then this element is incremented.
  2. If an element is bigger than both its left neighbor and its right neighbor, then this element is decremented.
  3. The first and last elements never change.

After some days, the array does not change. Return that final array.

 

Example 1:

Input: arr = [6,2,3,4]
Output: [6,3,3,4]
Explanation: 
On the first day, the array is changed from [6,2,3,4] to [6,3,3,4].
No more operations can be done to this array.

Example 2:

Input: arr = [1,6,3,4,3,5]
Output: [1,4,4,4,4,5]
Explanation: 
On the first day, the array is changed from [1,6,3,4,3,5] to [1,5,4,3,4,5].
On the second day, the array is changed from [1,5,4,3,4,5] to [1,4,4,4,4,5].
No more operations can be done to this array.

 

Constraints:

  • 3 <= arr.length <= 100
  • 1 <= arr[i] <= 100

Solutions

Python3

class Solution:
    def transformArray(self, arr: List[int]) -> List[int]:
        copy = [e for e in arr]
        has_change, n = True, len(arr)
        while has_change:
            has_change = False
            for i in range(1, n - 1):
                if arr[i] < copy[i - 1] and arr[i] < copy[i + 1]:
                    arr[i] += 1
                    has_change = True
                elif arr[i] > copy[i - 1] and arr[i] > copy[i + 1]:
                    arr[i] -= 1
                    has_change = True
            copy = [e for e in arr]
        return arr

Java

class Solution {
    public List<Integer> transformArray(int[] arr) {
        int n = arr.length;
        int[] copy = Arrays.copyOf(arr, n);
        boolean hasChange = true;
        while (hasChange) {
            hasChange = false;
            for (int i = 1; i < n - 1; ++i) {
                if (arr[i] < copy[i - 1] && arr[i] < copy[i + 1]) {
                    ++arr[i];
                    hasChange = true;
                } else if (arr[i] > copy[i - 1] && arr[i] > copy[i + 1]) {
                    --arr[i];
                    hasChange = true;
                }
            }
            System.arraycopy(arr, 0, copy, 0, n);
        }
        List<Integer> res = new ArrayList<>();
        for (int e : arr) {
            res.add(e);
        }
        return res;
    }
}

...