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 }

原文地址:https://www.cnblogs.com/leechee9/p/11790853.html

时间: 2024-11-10 21:31:40

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

LeetCode(976. 三角形的最大周长)

问题描述 给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的.面积不为零的三角形的最大周长. 如果不能形成任何面积不为零的三角形,返回 0. 示例 1: 输入:[2,1,2] 输出:5 示例 2: 输入:[1,2,1] 输出:0 示例 3: 输入:[3,2,3,4] 输出:10 示例 4: 输入:[3,6,2,3] 输出:8 解决方案 class Solution: def largestPerimeter(self, A): """ :type A: Lis

976. 三角形的最大周长

给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的.面积不为零的三角形的最大周长. 如果不能形成任何面积不为零的三角形,返回 0. 示例 1: 输入:[2,1,2] 输出:5 示例 2: 输入:[1,2,1] 输出:0 示例 3: 输入:[3,2,3,4] 输出:10 示例 4: 输入:[3,6,2,3] 输出:8 提示: 3 <= A.length <= 10000 1 <= A[i] <= 10^6 思路 不失一般性的,我们假设三角形的边长满足 a \leq b

力扣(LeetCode)976. 三角形的最大周长

给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的.面积不为零的三角形的最大周长. 如果不能形成任何面积不为零的三角形,返回 0. 示例 1: 输入:[2,1,2] 输出:5 示例 2: 输入:[1,2,1] 输出:0 示例 3: 输入:[3,2,3,4] 输出:10 示例 4: 输入:[3,6,2,3] 输出:8 提示: 3 <= A.length <= 10000 1 <= A[i] <= 10^6 思路 先将数组从小到大排序,然后从后往前遍历相邻最大的满足条件

976 三角形的最大周长--重要

虽然是简单题,但是花费了自己不少时间!! 1.想用计数排序,结果还写错了,真的难受!!,最后还是用的vector的自动排序指令,sort,刚开始自己忘了!! 2.思路 排序:排序的是遍历的前提 从最右边的数遍历,三个连续的,最小的加第二小大于最大的就返回值,否则,最右边的数向左边移一位,不要再犯程序中的错误了好吗!!! 注意.一定有返回值,return 0 3.代码 1 //之前自己没写过排序算法,今天第一次用计数排序,刚刚在上一题数组相对排序中学到的 2 //发现了自己的错误,已经排序了!如果

算法大神之路----排序(冒泡排序法)

冒泡排序法 冒泡排序法又称为交换排序法,是由观察水中冒泡变化构思而成,气泡随着水深压力而改变.气泡在水底时,水压最大,气泡最小,而气泡慢慢浮上水面时,气泡所受压力最小,体积慢慢变大. 冒泡排序比较方式是从第一个元素开始,比较相邻的元素大小,如果大小顺序有误,则对调后进行下一个元素比较.直到所有元素满足关系为止. 冒泡排序法分析 冒泡排序法平均情况下,需要比较(n-1)/2次,时间复杂度为O(n2),最好的情况只需要扫描一次,不用操作,即作n-1次比较,时间复杂度为O(n). 由于冒泡排序为相邻两

PHP 冒泡排序法

1 <?php 2 // 冒泡排序法:将一个数组中的值按照从小到大的顺 序排序 3 $arr = array(1, 4, 5, 2, 3, 7, 9, 8); 4 $len = count($arr); 5 $len2= $len - 1; 6 for ($i = 0; $i < $len; $i++) 7 { 8 for ($j = 0; $j < $len2; $j++) 9 { 10 if ($arr[$j] > $arr[$j + 1]) // 比较当前的与下一个的大小 1

关于Java中的选择排序法和冒泡排序法

一,这种方法是直接传入一个数组进行排序(选择排序法) public static void selectSort(int arr[]){ for (int i = 0; i < arr.length-1; i++) { for (int j = i+1; j < arr.length; j++) { if(arr[j]<arr[i]){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } 二,这种事传入一个数组和一个数组个数(选择排序

PHP冒泡排序法

冒泡排序法是一种很基础的排序方法,也是面试题中经常问到的一道题目.今天做了一下简单的分析,具体代码和思路如下 1 <?php 2 3 /*思路: 4 *按照元素顺序循环比较, 5 * 当前元素为$array[$i],取后面的元素与 6 * $array[$i]比较,所以应该从第$j($j=$i+1)个元素开始比较; 7 * 8 *比较$array[$i]和$array[$j]的大小,将较大的元素放到前面,所以要使用中间变量$tmp 9 *过渡 10 * 11 *因为$i次循环后,只能保证$arr

C#冒泡排序法学习

一,冒泡排序法理解:就是将一个集合里的数据当前位置和后一位比较,然当前位置大于后一位,则两个位置替换,直到排序完成 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MaoPao { class Program { static void Sort(int[] sArray) { bool sw = true; do { sw = false; for (