首页 > 其他 > 详细

LeetCode 611. 有效三角形个数

时间:2020-08-19 22:10:21      阅读:99      评论:0      收藏:0      [点我收藏+]

题目描述链接:https://leetcode-cn.com/problems/valid-triangle-number/

解题思路:1.暴力,将数组排序,然后进行判断即可

                 2.二分,将数组排序,然后找满足num[i]+num[j]>nums[k]的k的最大值,则k-j-1即为i,j情况下的有效三角形个数,然后j+1继续判断

                 3.双指针。nums[i]+nums[j]>nums[k]的k的最大值k1找到后,对于nums[i]+num[j+1]>nums[k]的最大值一定大于等于前者的k1故可从k1继续查找。

双指针法的参考代码如下:

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int ans=0;
        int k=0;
        int j;
        int i;
        for(i=0;i<nums.size();i++){
            k=i+2;
            for(j=i+1;j<nums.size();j++){
                while(k<nums.size()&&nums[i]+nums[j]>nums[k]){
                     k++;
                   }
                if(k-j-1>0)//存在满足条件,以防止将k-j-1为-1的情况计入
                     ans+=k-j-1;   
            }
            
        }
        
        return ans;
    }
};

 

LeetCode 611. 有效三角形个数

原文:https://www.cnblogs.com/zzw-/p/13531152.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!