給定乙個包含非負整數的陣列,你的任務是統計其中可以組成三角形三條邊的三元組個數。
示例 1:
輸入: [2,2,3,4]
輸出: 3
解釋:有效的組合是:
2,3,4 (使用第乙個 2)
2,3,4 (使用第二個 2)
2,2,3
注意:陣列長度不超過1000。
陣列裡整數的範圍為 [0, 1000]。
1.此題類似於求三數之和為零。
2.三邊構成三角形的條件,任意兩邊之和大於第三邊,任意兩邊之差小於第三邊。
與三數之和一樣,先確定兩條邊,再求第三條邊。
1.由於陣列裡整數的範圍為[0, 1000],故先對輸入進行判定:若陣列中大於0的個數若小於3個,則直接return 0;否則去除陣列中的零,再執行後續操作。
2.對陣列進行排序,這樣除了方便步驟1中的數非零數的個數和去零外,還能是確定第三條邊不可缺的條件。
3.先確定兩個指標i,j,完成雙迴圈,其中j的初始條件為j = i + 1;
4.確定第三條邊的範圍:設立左座標index1,初始化為0,每次迴圈+1直至nums[index1]>nums[j]-nums[i],右座標index2,初始化為nums.size()-1,每次迴圈-1直至nums[index1]i與j比對,若index1>i,index1–;若index2
class solution
}return res/3;
}};
該想法來自大佬luissssgao感覺比我的好不少!!!
每次先拿到第三條邊,然後找前兩條邊的範圍!這樣複雜度可以下降到0(n^2)!**如下(c++)
class solution
else }}
return count;
}};
Leetcode 有效三角形的個數
給定乙個包含非負整數的陣列,你的任務是統計其中可以組成三角形三條邊的三元組個數。示例 1 輸入 2,2,3,4 輸出 3 解釋 有效的組合是 2,3,4 使用第乙個 2 2,3,4 使用第二個 2 2,2,3注意 陣列長度不超過1000。陣列裡整數的範圍為 0,1000 時間複雜度o n3 o n3...
leetcode 611 有效三角形的個數
給定乙個包含非負整數的陣列,你的任務是統計其中可以組成三角形三條邊的三元組個數。示例 1 輸入 2,2,3,4 輸出 3 解釋 有效的組合是 2,3,4 使用第乙個 2 2,3,4 使用第二個 2 2,2,3 注意 陣列長度不超過1000。陣列裡整數的範圍為 0,1000 方法一 對陣列進行排序 固...
611 有效三角形的個數
題目描述 給定乙個包含非負整數的陣列,你的任務是統計其中可以組成三角形三條邊的三元組個數。示例 1 輸入 2,2,3,4 輸出 3 解釋 有效的組合是 2,3,4 使用第乙個 2 2,3,4 使用第二個 2 2,2,3 注意 陣列長度不超過1000。陣列裡整數的範圍為 0,1000 方法1 1 先對...