码迷,mamicode.com
首页 > 其他好文 > 详细

Solution to Triangle by Codility

时间:2015-06-02 23:32:26      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:algorithm

question: https://codility.com/programmers/lessons/4


we need two parts to prove our solution.

on one hand, there is no false triangular. Given the array has been sorted, if A[i]+A[i+1]>A[i+2], we can prove the existence of the triangle. for array A is sorted , we can easily confirm that A[i+2] + A[i] > A[i+1] and A[i+1]+A[i+2] >A[i]. So we just need to check this condition.

on the other hand,there is no underreporting triangular. If the inequality can hold for three out-of-order elements, to say, A[index]+A[index+m] > A[index+n], where n>m>1. because array A is sorted, we can reach that A[index+m-1]>=A[index] and A[index+n]>= A[index + m+1]; after simplification , we infer that A[index+m-1]+A[index+m] > A[index+m+1]. if we have any inequality holding for out-of-order elements, we MUST have AT LEAST an inequality holding for three consecutive elements.


some trap:

  • forget to check A[i] >0;
  • need to judge if A.size() <3; rather than left these to the condition in for loop.   because A.size() return size_t type . if A.size()==1,A.size()-2 may get a very large positive num, than lead to error.


C++ Solution

#include <algorithm>
#include <vector>
#include <map>
int solution(vector<int> &A) {
    // write your code in C++11
    if (A.size()<3)
        return 0;
    sort(A.begin(),A.end());
    for(int i=0; i< A.size()-2&& i<A.size(); i++){
        if(A[i]>0 && A[i]>A[i+2]-A[i+1])
            return 1;
    }
    return 0;
}


Solution to Triangle by Codility

标签:algorithm

原文地址:http://blog.csdn.net/chenlei0630/article/details/46335441

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!