三角形計數(shù)

最近,在做lintcode 上的題目,有一些題還是很有意思的。這個屬于中等難度的三角形計數(shù)。
題目:

給定一個整數(shù)數(shù)組,在該數(shù)組中,尋找三個數(shù),分別代表三角形三條邊的長度,問,可以尋找到多少組這樣的三個數(shù)來組成三角形?

首先,我們能想到的解法肯定是,將所有數(shù)組合,然后判斷。
代碼如下:

public class Solution {
    /**
     * @param S: A list of integers
     * @return: An integer
     */
    public int triangleCount(int S[]) {
        int result = 0;
        for (int i = 0; i < S.length - 2; i++) {
            for (int j = i + 1; j < S.length - 1; j++) {
                for (int k = j + 1; k < S.length; k++) {
                    if (trigangleJudge(S[i], S[j], S[k])) {
                        result++;
                    }
                }
            }
        }
        return result;
    }
    public  boolean trigangleJudge(int a, int b, int c) {
        if (a + b > c && a + c > b && b + c > a) {
            return true;
        } else {
            return false;
        }
    }
   
}

但是永遠沒有最好的解決辦法,所以我在網上一直想找一個更好的方法,此時看到一篇博客。其思想是,我們先找兩條邊,然后利用二分查找第三條邊。這位前輩是用Python寫的,這里我用java。很佩服他的思路。放到這里供大家借鑒思考
代碼如下:

public class Solution {
    /**
     * @param S: A list of integers
     * @return: An integer
     */
    public int triangleCount(int S[]) {
     int result = 0;
        Arrays.sort(S);
        for (int i = 0; i < S.length; i++) {
            for (int j = i + 1; j < S.length; j++) {
                int l = i + 1;
                int r = j;
                int target = S[j] - S[i];
                while (l < r) {
                    int mid = (l + r) / 2;
                    if (S[mid] > target) {
                        r = mid;
                    } else {
                        l = mid + 1;
                    }

                }
                result += (j - l);
            }
        }
        return result;
    }

   
}

兩份解決方案的測試結果如下:

第一種.png
第二種.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 描述 給定一個整數(shù)數(shù)組,在該數(shù)組中,尋找三個數(shù),分別代表三角形三條邊的長度,問,可以尋找到多少組這樣的三個數(shù)來組成...
    6默默Welsh閱讀 276評論 0 0
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,890評論 0 33
  • 1 前言 一直想沿著圖像處理這條線建立一套完整的理論知識體系,同時積累實際應用經驗。因此有了從使用AVFounda...
    RichardJieChen閱讀 5,928評論 5 12
  • 有少年妾意郎情花前月下 有月下書生款款提筆以夢為馬 有竹馬夙夜匪懈繡戶人家 有人家高堂斜臥與我區(qū)區(qū)足下 有足下綺羅...
    馭魂師閱讀 418評論 0 1
  • 01 文清 認識文清前,我經常一個人,很孤獨,上學課余也沒有什么朋友。文清,是我第一個真正意義上的朋友,我真的很喜...
    我來自稀里糊涂星球閱讀 361評論 0 1

友情鏈接更多精彩內容