【LeetCode——编程能力入门第二天】运算符(三角形的最大周长(贪心算法)/找到最近的有相同 X 或 Y 坐标的点)

运算符(三角形的最大周长(贪心算法)/找到最近的有相同 X 或 Y 坐标的点)

目录

题目:三角形的最大周长(贪心算法)

分析

贪心算法概述

代码 

题目: 找到最近的有相同 X 或 Y 坐标的点

分析 

代码 


博主萌新一枚,如果文章哪里有不妥当的,还请大佬们提出!谢谢支持!

题目:三角形的最大周长(贪心算法)

给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。

示例 1:

输入:nums = [2,1,2]
输出:5
示例 2:

输入:nums = [1,2,1]
输出:0

提示:

3 <= nums.length <= 104
1 <= nums[i] <= 106

分析

给定一个数组里边放着一些数,要求我们找出三个数(代表三个边)可以组成最大三角形的数。初中我们都学过三角形的三边关系:两边之和大于第三边OR两边之差小于第三边满足其中任意的一个条件就可以构成三角形。于是我就萌生出个这样的想法,如果是找数组中最大的三个数可以构成三角形的周长最大。我们可以对数组进行排序,然后依次从数组中拿出来(最大值 次大值 次大值,所选择的每个边都是局部最优的方案,从而求出构成最大周长的最优解)进行判断他们是否符合了构成三角形的规则。如果可以构成我们直接breek循环。而我们使用的这样方法就是贪心算法。你是不是感到不可思议!!!

你也许会说这不就是生活中的基本常识吗?怎么成了算法了,究竟什么是贪心算法?

贪心算法概述

贪心算法是指在对问题进行求解时,在每一步都选择中都选取最好或最优的选项。

贪心算法所得到的结果不一定是最优的结果,但是都是相对于接近最优的结果。

例如:法外狂徒张三每天都要去偷钱,桌子上放着一元、五元、十元、五十元、一百元各一张,每次只能拿走一张,拿多了容易引起怀疑。张三特别喜欢钱,尤其是对红色情有独钟。所以张三每次去偷钱都会拿走一张一百元,每天都是如此。一个月之后是不是张三一共拿走了3000元。每天张三都会选择面值最大的,这也就解释了上边(在每一步都选择中都选取最好或最优的选项)。但是因为情况不同,所得到的结果不一定是最优的结果,但是都是相对于接近最优的结果。

总结:局部最优,从而求出全局最优

代码 

class Solution {
    public int largestPerimeter(int[] nums) {
        int max=0;//最大周长
    Arrays.sort(nums);//数组升序排序
    for(int i=nums.length-1;i>=2;i--){//依次遍历数组
        if(i-2>=0){     //判断从数组中取三个够不够   
    int j=nums[i];     //拿元素
    int k=nums[i-1];
    int l=nums[i-2];
    if(k+l>j){ //判断是否可以构成三角形
        max=l+j+k; //接受最大的周长
        return max;
    }
    }
    }
 return 0;
    }
}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享