在刷这道题时,受到别人的启发,并在其基础上改进了一下。
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 }
原文地址:https://www.cnblogs.com/leechee9/p/11790853.html
时间: 2024-11-10 21:31:40