Lintcode三角形计数

来源:互联网 发布:bf风格的淘宝店 编辑:程序博客网 时间:2024/06/05 15:12

自己写的代码,简单粗暴,但是超时。

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;      }  }; 
原创粉丝点击