自己写的代码,简单粗暴,但是超时。
class Solution {
public:
/*
* @param : A list of integers
* @return: An integer
*/
int triangleCount(vector<int> S) {
// write your code here
int len=S.size();
int num=0;
for(int i=0;i<len-2;i++){
for(int j=i+1;j<len-1;j++){
for(int k=j+1;k<len;k++){
if(S[i]+S[j]>S[k])
num++;
}
}
}
return num;
}
};
改进的代码
class Solution {
public:
/**
* @param S: A list of integers
* @return: An integer
*/
int triangleCount(vector<int> &S) {
// write your code here
int ret = 0;
int n = S.size();
sort(S.begin(), S.end());
for (int i = 0;i<n;i++)
{
for (int j = i + 1;j<n;j++)
{
int l = i+1;
int r = j;
int target = S[j]-S[i];
while(l<r)
{
int mid = (l+r)/2;
if(S[mid]>target)
r = mid;
else
l = mid+1;
}
ret += (j-l);
}
}
return ret;
}
};