可能是lintcode上的标注有误,这个题感觉不该是hard,
列出两种做法,
一种,2层循环加双指针
/**
* @param S: A list of integers
* @return: An integer
*/
public int triangleCount(int S[]) {
// write your code here
int left = 0, right = S.length - 1;
int ans = 0;
Arrays.sort(S);
for(int i = S.length - 1; i >=2; i--) {
left = 0;
right = i - 1;
while(left < right) {
if(S[left] + S[right] > S[i]) {
ans = ans + (right - left);
right --;
} else {
left ++;
}
}
}
return ans;
}
一种,3层循环
/**
* @param S: A list of integers
* @return: An integer
*/
public int triangleCount(int S[]) {
// write your code here
if (S == null || S.length < 3) {
return 0;
}
Arrays.sort(S);
int count = 0;
for (int i = 0; i < S.length - 2; i++) {
for (int j = i + 1; j < S.length - 1; j++) {
for (int k = j + 1; k < S.length; k++) {
if (S[i] + S[j] > S[k] ) {
count++;
}
}
}
}
return count;
}