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