有效三角形的個數

給定一個包含非負整數的數組,你的任務是統計其中能夠組成三角形三條邊的三元組個數。數組

輸入: [2,2,3,4]
輸出: 3
解釋:
有效的組合是: 
2,3,4 (使用第一個 2)
2,3,4 (使用第二個 2)
2,2,3spa

數組長度不超過1000。code

數組裏整數的範圍爲 [0, 1000]。blog

 

三條邊要能構成三角形,必然知足兩邊以後大於第三邊。也就是三條邊長度分別是a,b,c,知足a+b>c的均可以組成三角形。這和前面的求小於K的兩數以後的原理是同樣的。排序

 

1 對數組進行排序,這個時候從右邊選定c,也就是最長的一條邊。class

2 而後對c以前的數組求兩數之和。大於c的則知足條件。原理

 

代碼以下:統計

int triangleCount(int a[], int len)

{

    int left, right, anchor;

    int count = 0;

    insert_sort(a, len);

    for (int i = len - 1; i >= 2; i--)

    {

        //left從左邊開始,right從i以前的最右邊開始

        left = 0;

        right = i - 1;

        while (left < right)

        {

             if (a[left] + a[right] > a[i])

             {

                 //若是知足條件,則表示從left到right之間的數字和right相加都知足大於c的條件。由於數組是遞增的

                 count += right-left;

                 right--;

             }

             else

             {

                 //不知足條件,則left+1 向前繼續尋找

                 left += 1;

             }

        }

    }

    return count;

 

}
相關文章
相關標籤/搜索