Maximum Perimeter Triangle

  • + 0 comments

    Java implementation with comments:

    static int[] maximumPerimeterTriangle(int[] s) {
      // Triangle inequality theorem states that
      // for any non-degenerate triangle, the sum 
      // of the lengths of any two sides must be 
      // greater than the length of the remaining 
      // side.
    
      // Sort sticks in ascending order.
      Arrays.sort(s);
      // Reverse sticks in decending order.
      for(int left = 0 ; left < s.length / 2; left++) { 
        int right = s.length - 1 - left;
        int tmp = s[left]; 
        s[left] = s[right]; 
        s[right] = tmp;
      }
      // Go through the sticks in
      // descending order.
      for(int i = 0 ; i < s.length - 2 ; ++i) {
        if (s[i] < s[i+1] + s[i+2]) {
          // This is a non-degenerate triangle.
          // Because we ordered the sticks
          // in descending order this
          // triangle must have the maximum
          // perimeter.
          return new int[] { s[i+2], s[i+1], s[i] };        
        }
      }
      return new int[] { -1 }; 
    }