Dãy tăng dần
Chúng ta định nghĩa một mảng là tăng dần nếu arr[i] <= arr[i + 1] đúng với mọi i (0-based) sao cho (0 <= i <= n - 2).
Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một mảng số nguyên arr làm đối số duy nhất.
Hàm phải xác định xem có thể chuyển đổi mảng này thành mảng tăng dần bằng cách sửa đổi tối đa một phần tử hay không.
Nếu có thể, trả về true, ngược lại false.
Ví dụ, nếu đầu vào của hàm là:
Đầu vào
const arr = [8, 3, 3, 7, 9];
Đầu ra
const output = true;
Giải thích đầu ra
Vì chúng ta có thể thay thế 8 ở chỉ số 0 bằng 1 hoặc 2 để có mảng mong muốn.
Ví dụ
Dưới đây là mã:
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));Đầu ra
true