Triangle count

思路:
三角形的任意两边之和大于第三边。如果小的两条边之和大于最大的一条边长,那肯定是三角形。不用检查其它情况了。所以这道题是找i的左边,有多少种情况是S[left] + S[right] > S[i]成立。
代码如下:

 public class Solution {  
   /**  
    * @param S: A list of integers  
    * @return: An integer  
    */  
   public int triangleCount(int S[]) {  
     // write your code here  
     int res = 0;  
     Arrays.sort(S);  
     for(int i = 0; i < S.length; i++) {  
       int left = 0;  
       int right = i - 1;  
       while(left < right) {  
         if(S[left] + S[right] > S[i]) {  
           res += right - left;  
           right--;  
         } else {  
           left++;  
         }  
       }  
     }  
     return res;  
   }  
 }  

评论

此博客中的热门博文

776. Split BST

663. Equal Tree Partition

532. K-diff Pairs in an Array