Данный целочисленный массив nums возвращает true, если существует тройка индексов (i, j, k) такая, что i
Можете ли вы реализовать решение, работающее с временной сложностью O(n) и пространственной сложностью O(1)?
Чтобы эффективно решить эту проблему, нам нужно отслеживать наименьшие и вторые по величине значения, встречавшиеся на данный момент. Если мы найдем третье значение, которое больше второго наименьшего, то мы нашли возрастающую тройку.
Решение методом грубой силы включает в себя проверку всех возможных троек на предмет существования такой, которая удовлетворяет условию i
function increasingTripletBruteForce(nums: number[]): boolean { const n = nums.length; for (let i = 0; iАнализ временной сложности:
Решение методом грубой силы неэффективно и не подходит для входных данных большого размера.
Оптимизированное решение предполагает перебор массива с сохранением двух переменных, первой и второй, которые представляют наименьшее и второе наименьшее значения, встречавшиеся на данный момент. Если мы находим значение больше секунды, мы возвращаем true.
function increasingTriplet(nums: number[]): boolean { let first = Infinity; let second = Infinity; for (let num of nums) { if (numАнализ временной сложности:
console.log(increasingTripletBruteForce([1,2,3,4,5])); // true console.log(increasingTripletBruteForce([5,4,3,2,1])); // false console.log(increasingTripletBruteForce([2,1,5,0,4,6])); // true console.log(increasingTripletBruteForce([1,1,1,1,1])); // false console.log(increasingTripletBruteForce([1,2])); // false console.log(increasingTripletBruteForce([1,2,3])); // true console.log(increasingTripletBruteForce([1,5,0,4,1,3])); // true console.log(increasingTriplet([1,2,3,4,5])); // true console.log(increasingTriplet([5,4,3,2,1])); // false console.log(increasingTriplet([2,1,5,0,4,6])); // true console.log(increasingTriplet([1,1,1,1,1])); // false console.log(increasingTriplet([1,2])); // false console.log(increasingTriplet([1,2,3])); // true console.log(increasingTriplet([1,5,0,4,1,3])); // true
Проблемы с подмассивом:
Техника двухочковых ударов:
Алгоритмы на месте:
Практикуя такие задачи и стратегии, вы сможете улучшить свои навыки решения проблем и лучше подготовиться к различным задачам кодирования.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3