Lesson 6 question 3 Triangle

源地址

https://app.codility.com/programmers/lessons/6-sorting/triangle/

Triangle 三角形

給定一個含有N個整數的非空數組A,滿足一下條件時我們說(P, Q, R) 是一個三角形

  • 0 ≤ P < Q < R < N
  • A[P] + A[Q] > A[R],
  • A[Q] + A[R] > A[P],
  • A[R] + A[P] > A[Q].

比如:

A[0] = 10    A[1] = 2    A[2] = 5
A[3] = 1     A[4] = 8    A[5] = 20

(0, 2, 4) 是一個三角形.
寫一個函數

   	class Solution { 
   		public int solution(int[] A);
   	 }

給定一個含有N個整數的非空數組A,如果存在一個三角形就返回1,否則返回0.
比如:

A[0] = 10    A[1] = 2    A[2] = 5
A[3] = 1     A[4] = 8    A[5] = 20

函數應該返回1.

  A[0] = 10    A[1] = 50    A[2] = 5
  A[3] = 1	

函數應該返回0.
假定:

  • N是範圍在 [0…100,000]的整數
  • A中的每個元素都是範圍在 [−2,147,483,648…2,147,483,647]的整數

第一步

先對數組升序排序,對於一個升序的數組來說,一下4個條件中滿足1肯定就滿足3,4.所以只需要判斷是否滿足條件2即可.

  • 0 ≤ P < Q < R < N
  • A[P] + A[Q] > A[R],
  • A[Q] + A[R] > A[P],
  • A[R] + A[P] > A[Q].

如果在判斷時使用加法,有可能出現溢出的問題,所以使用 A[P] > A[R] - A[Q] 來進行判斷 .

 	public int solution(int[] A) {
        int N = A.length;
        if (N > 2) {
            Arrays.sort(A);
            for (int i = 0; i < N - 2; i++) {
                if (A[i] <= 0)
                    continue;
                if (A[i] > A[i + 2] - A[i + 1])
                    return 1;
            }
        }
        return 0;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章