在 JavaScript 中将数组转换为递增序列

递增序列

我们将数组定义为递增,如果 arr[i] <= arr[i + 1] 对每个 i(从 0 开始)都成立,使得 (0 <= i <= n - 2)。

问题

我们需要编写一个 JavaScript 函数,它接受一个整数数组 arr 作为第一个也是唯一的参数。

我们的函数应该确定我们是否可以通过修改数组的最多一个元素来将此数组转换为递增数组。

如果我们可以这样做,我们应该返回 true,否则返回 false。

例如,如果函数的输入是

输入

const arr = [8, 3, 3, 7, 9];

输出

const output = true;

输出说明

因为我们可以用 1 或 2 替换索引 0 处的 8 以获得所需的数组。

示例

以下是代码 -

const arr = [8, 3, 3, 7, 9];
   const canConvert = (arr = []) => {
      const find = () => {
         for (let i = 1; i < arr.length; i++) {
            if (arr[i] < arr[i - 1]) {
               return false
            }
         }
         return true
      }
      for (let i = 0; i < arr.length; i++) {
         if (arr[i] < arr[i - 1]) {
            const temp = arr[i]
            arr[i] = arr[i - 1]
            if (find(arr)) {
               return true
            }
            arr[i] = temp
            arr[i - 1] = arr[i]
            return find(arr)
      }
   }
   return true
}
console.log(canConvert(arr));
输出结果
true