[LeetCode] 611. Valid Triangle Number

来源:互联网 发布:浏览器源码 编辑:程序博客网 时间:2024/06/07 09:06

Given an array consists of non-negative integers, your task is to count the number of triplets chosen from the array that can make triangles if we take them as side lengths of a triangle.

Example 1:

Input: [2,2,3,4]Output: 3Explanation:Valid combinations are: 2,3,4 (using the first 2)2,3,4 (using the second 2)2,2,3

Note:
The length of the given array won’t exceed 1000.
The integers in the given array are in the range of [0, 1000].

// 29msclass Solution {public:    int triangleNumber(vector<int>& nums) {        sort(nums.begin(), nums.end());        int total = 0;        for (int i = 0; i < nums.size(); i++) {            int k = 0;            for (int j = i + 1; j + 1 < nums.size(); j++) {                k = max(j + 1, k);                while (k < nums.size() && nums[k] < nums[i] + nums[j]) k++;                total += (k - j - 1);            }        }        return total;    }};
// 19msclass Solution {public:    int triangleNumber(vector<int>& nums) {        sort(nums.begin(), nums.end());        int total = 0;        for (int k = nums.size() - 1; k >= 2; k--) {            int i = 0, j = k - 1;            while (i < j) {                if (nums[i] + nums[j] > nums[k]) {                    total += (j - i);                    j--;                } else {                    i++;                }            }        }        return total;    }};