【LeetCode(Java) - 1243】数组变换

1、题目描述

在这里插入图片描述

2、解题思路

  注意本题的提示:1 <= arr.length <= 100

  1、如果 arr 的长度小于等于 2,直接装入 list 返回;否则进入下一步;

  2、定义一个布尔型变量 isChange = true 用来表示前一天是否发生变化;

  3、进入循环,循环条件就是 isChange:

  3.1 进入循环体先把 isChange 设置成 false;

  3.2 复制 arr 到 lastArr;

  3.3 遍历 lastArr,

  3.4 如果元素小于它的左右邻居,arr[i]++;isChange = true;

  3.5 如果小于,则arr[i]–;isChange = true;

  3.6 如果都不是,则什么都不做。

3、解题代码

class Solution {
    public List<Integer> transformArray(int[] arr) {
        int length = arr.length;
        if (length <= 2) {  // 装载 list 直接返回
            List<Integer> list = new ArrayList<>();
            for (int n : arr) {
                list.add(n);
            }
            return list;
        }
        boolean isChange = true;
        int[] lastArr;
        while (isChange) {
            isChange = false;
            lastArr = Arrays.copyOf(arr, length);
            for (int i = 1; i < length - 1; i++) {
                if (lastArr[i] > lastArr[i - 1] && lastArr[i] > lastArr[i + 1]) {
                    arr[i]--;
                    isChange = true;
                }
                if (lastArr[i] < lastArr[i - 1] && lastArr[i] < lastArr[i + 1]) {
                    arr[i]++;
                    isChange = true;
                }
            }
        }
        // 此时的 arr 已经没法再变了
        List<Integer> list = new ArrayList<>();
        for (int n : arr) {
            list.add(n);
        }
        return list;
    }
}
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页