标签: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:
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