https://leetcode.com/problems/largest-perimeter-triangle | Easy |
---|
Дан массив целых чисел nums
. Требуется вернуть наибольший периметр треугольника с ненулевой площадью, который можно составить из трех элементов этого массива. Если невозможно составить такой треугольник, верните 0.
Input:
nums = [2,1,2]Output:
5Explanation:
Треугольник со сторонами 2, 1 и 2 имеет периметр 5.
Input:
nums = [1,2,1,10]Output:
0Explanation:
Вы не можете использовать длины сторон 1, 1 и 2 для формирования треугольника.
Вы не можете использовать длины сторон 1, 1 и 10 для формирования треугольника.
Вы не можете использовать длины сторон 1, 2 и 10 для формирования треугольника.
Поскольку невозможно использовать любые три длины сторон для формирования треугольника с ненулевой площадью, мы возвращаем 0.
fun largestPerimeter(nums: IntArray): Int {
// Сортировка массива по возрастанию с использованием пузырьковой сортировки
for (i in nums.indices) {
for (j in 0 until nums.size - i - 1) {
if (nums[j] > nums[j + 1]) {
val temp = nums[j]
nums[j] = nums[j + 1]
nums[j + 1] = temp
}
}
}
// Проходим по массиву с конца к началу
for (i in nums.size - 3 downTo 0) {
// Проверяем условие существования треугольника
if (nums[i] + nums[i + 1] > nums[i + 2]) {
// Возвращаем периметр треугольника
return nums[i] + nums[i + 1] + nums[i + 2]
}
}
// Если не удалось найти подходящие стороны, возвращаем 0
return 0
}
O(n log n), где n — длина массива nums
, из-за сортировки массива.
O(1), так как используется постоянное количество дополнительной памяти.