给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。 示例 1:
输入:nums = [2,1,2]
输出:5
var largestPerimeter = function(nums) {
const n = nums.length
nums.sort((a, b) => b - a)
for (let i = 0; i + 2 < n; i++) {
if (nums[i + 1] + nums[i + 2] > nums[i]) return nums[i] + nums[i + 1] + nums[i + 2]
}
return 0
}; function largestPerimeter(nums: number[]): number {
const n = nums.length
nums.sort((a, b) => b - a)
for (let i = 0; i + 2 < n; i++) {
if (nums[i + 1] + nums[i + 2] > nums[i]) return nums[i] + nums[i + 1] + nums[i + 2]
}
return 0
}; func largestPerimeter(nums []int) int {
n := len(nums)
sort.Sort(sort.Reverse(sort.IntSlice(nums)))
for i := 0; i + 2 < n; i++ {
if nums[i + 1] + nums[i + 2] > nums[i] {
return nums[i] + nums[i + 1] + nums[i + 2]
}
}
return 0
} class Solution {
function largestPerimeter($nums) {
$n = sizeof($nums);
rsort($nums);
for ($i = 0; $i + 2< $n; $i++) {
if ($nums[$i + 1] + $nums[$i + 2] > $nums[$i]) return $nums[$i] + $nums[$i + 1] + $nums[$i + 2];
}
return 0;
}
} class Solution {
public int largestPerimeter(int[] nums) {
int n = nums.length;
Arrays.sort(nums);
for (int l = 0, r = n - 1; l < r; l++, r--) {
int t = nums[l];
nums[l] = nums[r];
nums[r] = t;
}
for (int i = 0; i + 2 < n; i++) {
if (nums[i + 1] + nums[i + 2] > nums[i]) return nums[i] + nums[i + 1] + nums[i + 2];
}
return 0;
}
} class Solution:
def largestPerimeter(self, nums: List[int]) -> int:
n, nums = len(nums), sorted(nums, reverse=True)
for i in range(0, n - 2):
if nums[i + 1] + nums[i + 2] > nums[i]: return nums[i] + nums[i + 1] + nums[i + 2]
return 0 int cmp (const void *a, const void *b) {
return *(int *)b - *(int *)a;
}
int largestPerimeter(int* nums, int numsSize){
qsort(nums, numsSize, sizeof(int), cmp);
for (int i = 0; i + 2 < numsSize; i++) {
if (nums[i + 1] + nums[i + 2] > nums[i]) return nums[i] + nums[i + 1] + nums[i + 2];
}
return 0;
} class Solution { // greater<int>()
public:
int largestPerimeter(vector<int>& nums) {
int n = nums.size();
sort(nums.begin(), nums.end(), greater<int>());
for (int i = 0; i + 2 < n; i++) {
if (nums[i + 1] + nums[i + 2] > nums[i]) return nums[i] + nums[i + 1] + nums[i + 2];
}
return 0;
}
}; class Solution { // 自定义排序函数
public:
static bool cmp (int a, int b) {
return a > b;
}
int largestPerimeter(vector<int>& nums) {
int n = nums.size();
sort(nums.begin(), nums.end(), cmp);
for (int i = 0; i + 2 < n; i++) {
if (nums[i + 1] + nums[i + 2] > nums[i]) return nums[i] + nums[i + 1] + nums[i + 2];
}
return 0;
}
}; public class Solution {
public int LargestPerimeter(int[] nums) {
int n = nums.Length;
Array.Sort(nums, delegate(int a, int b) {
return b - a;
});
for (int i = 0; i + 2 < n; i++) {
if (nums[i + 1] + nums[i + 2] > nums[i]) return nums[i] + nums[i + 1] + nums[i + 2];
}
return 0;
}
}