QUESTION:
Given an integer array nums, return the number of triplets chosen from the array that can make triangles if we take them as side lengths of a triangle.
Example 1:
Input: nums = [2,2,3,4]
Output: 3
Explanation: Valid combinations are:
2,3,4 (using the first 2)
2,3,4 (using the second 2)
2,2,3
Example 2:
Input: nums = [4,2,3,4]
Output: 4
Constraints:
1 <= nums.length <= 1000
0 <= nums[i] <= 1000
EXPLANATION:
思路也就比较简单, 三个for循环进行判断即可, 但是中间有tle, 所以需要把对应的过程简化一下, 也就是先排序, 如果两边完全小于第三边了, 后面的就没有必要再循环了.
SOLUTION:
class Solution {
func triangleNumber(_ nums: [Int]) -> Int {
if nums.count < 3 {
return 0
}
var result = 0
var nums = nums.sorted()
for indexI in 0...nums.count-3 {
for indexJ in indexI+1...nums.count-2 {
for indexM in indexJ+1...nums.count-1 {
if (nums[indexI]+nums[indexJ]<nums[indexM]) {
break
}
if ((nums[indexI]+nums[indexJ] > nums[indexM] && abs(nums[indexI]-nums[indexJ])<nums[indexM])
|| (nums[indexI]+nums[indexM] > nums[indexJ] && abs(nums[indexI]-nums[indexM])<nums[indexJ])
|| (nums[indexM]+nums[indexJ] > nums[indexI] && abs(nums[indexM]-nums[indexJ])<nums[indexI])) {
result+=1
}
}
}
}
return result
}
}