刷題-力扣-611. 有效三角形的個數
阿新 • • 發佈:2021-08-05
611. 有效三角形的個數
題目連結
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/valid-triangle-number
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
題目描述
給定一個包含非負整數的陣列,你的任務是統計其中可以組成三角形三條邊的三元組個數。
示例 1:
輸入: [2,2,3,4]
輸出: 3
解釋:
有效的組合是:
2,3,4 (使用第一個 2)
2,3,4 (使用第二個 2)
2,2,3
注意:
- 陣列長度不超過1000。
- 數組裡整數的範圍為 [0, 1000]。
題目分析
- 根據題目描述,判讀非負組中可以構成的三角形的個數
- 對於有序數a<b<c判斷是否可以構成三角形,只需判讀a+b>c成立,所以先對陣列排序
- 使用雙指標判斷步驟2中的條件是否成立
程式碼
class Solution { public: int triangleNumber(vector<int>& nums) { sort(nums.begin(), nums.end()); int numsLen = nums.size(); int triangle = 0; for (int i = 0; i < numsLen; ++i) { int k = i; for (int j = i + 1; j < numsLen; ++j) { while (k + 1 < numsLen && nums[k + 1] < nums[i] + nums[j]) ++k; triangle += max(k - j, 0); } } return triangle; } };