976. 三角形的最大周长(冒泡排序法的活用)

在刷这道题时,受到别人的启发,并在其基础上改进了一下。

1.三边构成三角形的充分必要条件是:较小的两边之和大于第三边

2.用Arrays.sort(),时间复杂度为O(n2

3.在这里用冒泡排序法,最好的结果就排序3趟,时间为3n,最坏的结果n2

4.冒泡排序法中,当某一趟没有交换时,排序完成。这里照搬过来,但是不能直接退出循环,还是要继续比较是否为三角形。

 1 class Solution {
 2     public int largestPerimeter(int[] A) {
 3         Arrays.sort(A);
 4         for(int i = A.length-1; i >= 2; i--){
 5             if( (A[i-1] + A[i -2] > A[i])  )
 6                return A[i] + A[i-1] + A[i-2];
 7         }
 8          return 0;
 9     }
10 }

用冒泡排序法改进后:

 1 class Solution {
 2     public int largestPerimeter(int[] A) {
 3         boolean mark = true;
 4         for(int i = 1; i < A.length; i++){
 5             if(mark){
 6                 mark = false;
 7                 for(int j = 0; j < A.length - i; j++){
 8                     if(A[j+1] < A[j]){
 9                         int tmp = A[j];
10                         A[j] = A[j+1];
11                         A[j+1] = tmp;
12                         mark = true;
13                     }
14                 }
15             }
16             
17             if(i>=3){
18                 if(A[A.length-i] + A[A.length-i+1] > A[A.length-i+2] )
19                     return A[A.length-i] + A[A.length-i+1] + A[A.length-i+2];
20             }
21         }
22         
23         if(A[0] + A[1] >A[2]) return A[0] + A[1] + A[2];
24         else return 0;
25     }
26 }

猜你喜欢

转载自www.cnblogs.com/leechee9/p/11790853.html