日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

69 三角形计数(Triangle Count)

發布時間:2024/3/12 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 69 三角形计数(Triangle Count) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 題目
    • 2 解決方案
      • 2.1 思路
      • 2.2 時間復雜度
      • 2.3 空間復雜度
    • 3 源碼

1 題目

題目:三角形計數(Triangle Count)
描述:給定一個整數數組,在該數組中,尋找三個數,分別代表三角形三條邊的長度,問,可以尋找到多少組這樣的三個數來組成三角形?

lintcode題號——382,難度——medium

樣例1:

輸入: [3, 4, 6, 7] 輸出: 3 解釋: 可以組成的是 (3, 4, 6), (3, 6, 7),(4, 6, 7)

樣例2:

輸入: [4, 4, 4, 4] 輸出: 4 解釋:任何三個數都可以構成三角形,所以答案為 C(3, 4) = 4

2 解決方案

2.1 思路

??首先三條邊在滿足a<=b<=c的前提下,只要滿足a+b>c即可構成三角形,這樣我們先對數組進行排序,使得按照位置取出來的三個數能夠滿足a<=b<=c,將c通過循環進行遍歷固定,再在c位置之前的子數組中找到和的值大于c的兩個數即可。

2.2 時間復雜度

??排序的時間復雜度O(n * log n),外層循環的時間復雜度為O(n),在子數組找兩數和大于目標值的數的時間復雜度為O(n),總時間復雜度為O(n^2)。

2.3 空間復雜度

??空間復雜度為O(1)。

3 源碼

細節:

  • 形成三角形的三邊條件為(a<b<c && a+b>c)即可。
  • 先進行排序,讓有序取出的abc滿足a<b<c,再固定c去判斷a+b>c(下標遍歷固定c,再two sum之前的區間)
  • 若a+b比c大,則b不動,a右移的所有a+b都大于c,加入結果之后,b左移進行下一輪
  • 若a+b比c小,則需要a左移,進行下一輪
  • C++版本:

    /** * @param S: A list of integers * @return: An integer */ int triangleCount(vector<int> &S) {// write your code hereint result = 0;if (S.empty()){return result;}// 先排序,確保三個數的大小 a<=b<=csort(S.begin(), S.end());// 固定c的位置for (int i = 2; i < S.size(); i++){int target = S.at(i);int temp = twoSumGreater(S, 0, i - 1, target); // 找到子數組中令兩數和大于目標值的結果個數result += temp;}return result; }// left指向a,right指向b,找到令 a+b>c 的結果 int twoSumGreater(vector<int> & S, int left, int right, int target) {int result = 0;while (left < right){if (S.at(left) + S.at(right) <= target){left++;}else if(S.at(left) + S.at(right) > target){result = result + (right - left); // 直接將left左移的所有結果加入right--;}}return result; }

    總結

    以上是生活随笔為你收集整理的69 三角形计数(Triangle Count)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。