611. Valid Triangle Number
题目文本会按所选界面语言从俄语翻译;代码保持不变。
Если задан 整数 数组 nums, return количество выбранных из 数组а троек, которые могут образовывать треугольники, если принять их за длины сторон треугольника.
示例:
Input: nums = [2,2,3,4]
Output: 3
C# 解法
匹配/原始public class Solution {
public int TriangleNumber(int[] nums) {
Array.Sort(nums);
int n = nums.Length;
int count = 0;
for (int k = n - 1; k >= 2; k--) {
int i = 0;
int j = k - 1;
while (i < j) {
if (nums[i] + nums[j] > nums[k]) {
count += j - i;
j--;
} else {
i++;
}
}
}
return count;
}
}
C++ 解法
自动草稿,提交前请检查#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public int TriangleNumber(vector<int>& nums) {
sort(nums.begin(), nums.end());
int n = nums.size();
int count = 0;
for (int k = n - 1; k >= 2; k--) {
int i = 0;
int j = k - 1;
while (i < j) {
if (nums[i] + nums[j] > nums[k]) {
count += j - i;
j--;
} else {
i++;
}
}
}
return count;
}
}
Java 解法
匹配/原始import java.util.Arrays;
public class Solution {
public int triangleNumber(int[] nums) {
Arrays.sort(nums);
int n = nums.length;
int count = 0;
for (int k = n - 1; k >= 2; k--) {
int i = 0;
int j = k - 1;
while (i < j) {
if (nums[i] + nums[j] > nums[k]) {
count += j - i;
j--;
} else {
i++;
}
}
}
return count;
}
}
JavaScript 解法
匹配/原始function triangleNumber(nums) {
nums.sort((a, b) => a - b);
const n = nums.length;
let count = 0;
for (let k = n - 1; k >= 2; k--) {
let i = 0;
let j = k - 1;
while (i < j) {
if (nums[i] + nums[j] > nums[k]) {
count += j - i;
j--;
} else {
i++;
}
}
}
return count;
}
Go 解法
匹配/原始package main
import (
"sort"
)
func triangleNumber(nums []int) int {
sort.Ints(nums)
n := len(nums)
count := 0
for k := n - 1; k >= 2; k-- {
i := 0
j := k - 1
for i < j {
if nums[i] + nums[j] > nums[k] {
count += j - i
j--
} else {
i++
}
}
}
return count
}
Algorithm
Отсортируйте 数组 nums.
Используйте три вложенных цикла: для каждого фиксированного третьего elementа, используйте два указателя для поиска подходящих первых двух elementов, которые удовлетворяют неравенству треугольника.
Увеличивайте счетчик на количество подходящих пар для каждого третьего elementа.
😎
Vacancies for this task
活跃职位 with overlapping task tags are 已显示.
目前还没有活跃职位。