そして、非常によく似た質問3Sum。J = I + 1、K = N-1のように、我々は、I 3Sum固定されています。
この問題の三角形の二辺を必要とするため、第3の辺、NUMS [I] + NUMS [J]> NUMS [K]よりも大きいです。だから我々はKを固定するので、I = 0、J = K-1することができます。
NUMS [I] + NUMS [J]> NUMS [k]が、I、JおよびKプラスの範囲内の全ての数として[IのJ-1]記載の場合も可能です。
NUMS [i]が+ NUMS [J]≤nums[k]の場合のに対し、我々は、[i]はNUMSを増やす必要があり、それが増加します。
クラス解決{ パブリック: INT triangleNumber(ベクトル< INT >&NUMS){ int型 N = nums.size()。 int型のres = 0 ; ソート(nums.begin()、nums.end()); 用(int型 K = N 1、K> = 0 ; - K){ int型 I = 0、J = K- 1 。 一方(iは< j)を{ 場合(NUMS [I] + NUMS [J]> NUMS [K]){ RES + = J-私; - J; } 他{ ++ I。 } } } 戻りRES。 } }。
Oの時間複雑さ(N ^ 2)
参照
https://leetcode.com/problems/valid-triangle-number/discuss/128135/A-similar-O(n2)-solution-to-3-Sum