class Solution {
public:
vector<int> transformArray(vector<int>& arr) {
}
};
1243. 数组变换
首先,给你一个初始数组 arr
。然后,每天你都要根据前一天的数组生成一个新的数组。
第 i
天所生成的数组,是由你对第 i-1
天的数组进行如下操作所得的:
1
。1
。过些时日,你会发现数组将会不再发生变化,请返回最终所得到的数组。
示例 1:
输入:[6,2,3,4] 输出:[6,3,3,4] 解释: 第一天,数组从 [6,2,3,4] 变为 [6,3,3,4]。 无法再对该数组进行更多操作。
示例 2:
输入:[1,6,3,4,3,5] 输出:[1,4,4,4,4,5] 解释: 第一天,数组从 [1,6,3,4,3,5] 变为 [1,5,4,3,4,5]。 第二天,数组从 [1,5,4,3,4,5] 变为 [1,4,4,4,4,5]。 无法再对该数组进行更多操作。
提示:
1 <= arr.length <= 100
1 <= arr[i] <= 100
原站题解
python3 解法, 执行用时: 36 ms, 内存消耗: 15.9 MB, 提交时间: 2023-10-15 19:24:35
class Solution: def transformArray(self, arr: List[int]) -> List[int]: n = len(arr) while True: changed = False tmp = arr[:] #辅助判断 for i in range(1, n - 1): if tmp[i-1] < tmp[i] > tmp[i+1]: #山峰 arr[i] -= 1 changed = True elif tmp[i-1] > tmp[i] < tmp[i+1]: #山谷 arr[i] += 1 changed = True if changed == False: break return arr
golang 解法, 执行用时: 0 ms, 内存消耗: 2.1 MB, 提交时间: 2023-10-15 19:24:27
func transformArray(arr []int) []int { flag := true for flag { flag = false tmp := make([]int, len(arr)) copy(tmp, arr) for i, size := 1, len(arr); i < size-1; i++ { if arr[i] < arr[i-1] && arr[i] < arr[i+1] { tmp[i]++ flag = true } else if arr[i] > arr[i-1] && arr[i] > arr[i+1] { tmp[i]-- flag = true } } arr = tmp } return arr }
cpp 解法, 执行用时: 0 ms, 内存消耗: 7.4 MB, 提交时间: 2023-10-15 19:23:47
// 不能原地修改 class Solution { public: vector<int> transformArray(vector<int>& arr) { bool flag = true; while(flag) { flag = false; vector<int> tmp = arr; for (int i = 1, size = arr.size(); i < size-1; i++) { if (arr[i] < arr[i-1] && arr[i] < arr[i+1]) { tmp[i]++; flag = true; } else if (arr[i] > arr[i-1] && arr[i] > arr[i+1]) { tmp[i]--; flag = true; } } arr = tmp; } return arr; } };