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;
}
}