zoukankan      html  css  js  c++  java
  • Solution to Triangle by Codility

    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;
    }


  • 相关阅读:
    angular项目中,使用ant(蚂蚁金服)生成table表格
    angular2 单元测试
    angular2 单元测试
    angular2单元测试
    angular2单元测试
    angular2单元测试
    angular2单元测试
    浅谈Unicode和char的关系(Java)
    剖析面试最常见问题之 Java 基础知识
    ssm系列框架
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5308417.html
Copyright © 2011-2022 走看看