1. 程式人生 > 其它 >刷題-力扣-611. 有效三角形的個數

刷題-力扣-611. 有效三角形的個數

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]。

題目分析

  1. 根據題目描述,判讀非負組中可以構成的三角形的個數
  2. 對於有序數a<b<c判斷是否可以構成三角形,只需判讀a+b>c成立,所以先對陣列排序
  3. 使用雙指標判斷步驟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;
    }
};