1. 程式人生 > >[leetcode]611. Valid Triangle Number

[leetcode]611. Valid Triangle Number

[leetcode]611. Valid Triangle Number


Analysis

中午吃啥—— [每天刷題並不難0.0]

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.
在這裡插入圖片描述

Explanation:

第一種方法就是暴力解決,直接遍歷,然後判斷,時間複雜度是O(n^3)。
第二種方法用了雙指標,時間複雜度是O(n^2)。

Implement

方法一:

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        int res = 0;
        int len = nums.size();
        sort(nums.begin(), nums.end());
        for(int i=0; i<len; i++){
            for(int j=i+1; j<len; j++){
                for(int k=j+1
; k<len; k++){ if(nums[i]+nums[j] > nums[k]) res++; } } } return res; } };

方法二:

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        int res = 0;
        int len = nums.
size(); sort(nums.begin(), nums.end()); for(int i=len-1; i>=2; i--){ int l=0, r=i-1; while(l<r){ if(nums[l]+nums[r] > nums[i]){ res += r-l; r--; } else l++; } } return res; } };