题目描述
方法:
1. 排序后+二重遍历+查找
class Solution:
def triangleNumber(self, nums: List[int]) -> int:
if not nums:
return 0
nums.sort()
record = 0
for i in range(len(nums)):
for j in range(i+1, len(nums)):
k = j+1
while k<len(nums) and nums[k] < nums[i] + nums[j]:
record+=1
k+=1
return record
缺点:
该方法无法通过,时间复杂度高O(n3)
2. 排序后+二重遍历+二分查找
class Solution:
def triangleNumber(self, nums: List[int]) -> int:
if not nums:
return 0
nums.sort()
record = 0
for i in range(len(nums)):
for j in range(i+1, len(nums)):
l,r = j+1, len(nums)-1
restrict = nums[i] + nums[j]
while l <= r:
mid = (l+r)//2
# if nums[mid] == restrict:
# record += mid - j - 1
if nums[mid] >= restrict:
r = mid - 1
elif nums[mid] < restrict:
l = mid + 1
record += r - j
return record