LeetCode 611. 有效三角形的個數(C、C++、python)
阿新 • • 發佈:2018-12-18
給定一個包含非負整數的陣列,你的任務是統計其中可以組成三角形三條邊的三元組個數。
示例 1:
輸入: [2,2,3,4] 輸出: 3 解釋: 有效的組合是: 2,3,4 (使用第一個 2) 2,3,4 (使用第二個 2) 2,2,3
注意:
陣列長度不超過1000。
數組裡整數的範圍為 [0, 1000]。
C
int triangleNumber(int* nums, int numsSize) { if(numsSize<3) { return 0; } sort(nums,0,numsSize-1); int count=0; for(int i=numsSize-1;i>=2;i--) { int left=0; int right=i-1; while(left<right) { if(nums[left]+nums[right]>nums[i]) { count+=right-left; right--; } else { left++; } } } return count; } void sort(int *a, int left, int right) { if(left >= right) { return ; } int i = left; int j = right; int key = a[i]; while(i < j) { while(i < j && key <= a[j]) { j--; } a[i] = a[j]; while(i < j && key >= a[i]) { i++; } a[j] = a[i]; } a[i] = key; sort(a, left, i - 1); sort(a, i + 1, right); }
C++
class Solution { public: int triangleNumber(vector<int>& nums) { int n=nums.size(); if(n<3) { return 0; } sort(nums.begin(),nums.end()); int count=0; for(int i=n-1;i>=2;i--) { int left=0; int right=i-1; while(left<right) { if(nums[left]+nums[right]>nums[i]) { count+=right-left; right--; } else { left++; } } } return count; } };
python
class Solution: def triangleNumber(self, nums): """ :type nums: List[int] :rtype: int """ n=len(nums) if n<3: return 0 nums=sorted(nums) nums=nums[::-1] count=0 for i in range(0,n-2): left=i+1 right=n-1 while left<right: if nums[left]+nums[right]>nums[i]: count+=(right-left) left+=1 else: right-=1 return count