思路:首先肯定是排序,排序后只需要从一个方向上开始找即可;但这里我用的二分查找,确定A[i]和A[i-1]后我们需要在后面找一个数x,使得x为<A[i]+A[i+1]的最大的数,所以这种东西秒想到二分查找;后来通过后看评论,排序后直接从数组尾部开始遍历即可,因为要找最大的周长,并且A[i]肯定是>(A[i-1]-A[i-2])的,所以只需要找到某个A[i],它能够满足A[i]<A[i-1]+A[i-2]即直接就是最大的周长;

速度还有有差别的

//法1:
//在a[l]和a[r]之间找到小于等于max的最大的值
int find(vector<int> &a, int l, int r, int max)
{if (l > r)return -1;if (a[l] > max)return -1;if (a[r] < max)return a[r];int pre = -1;while (l < r){int mid = (l + r) / 2;if (a[mid] == max){return a[mid];}else if (a[mid] < max){//说明绕圈了,这个值就是目标值if (pre == a[mid]){return a[mid];}pre = a[mid];l = mid;}else{pre = a[mid];r = mid;}}return a[l];
}static bool cmp(int a, int b)
{return a < b;
}int largestPerimeter(vector<int> &A)
{int len = A.size();if (len < 3)return 0;int res = 0;sort(A.begin(), A.end(), cmp);for (int i = 1; i < len; i++){int min = A[i] - A[i - 1];int max = A[i] + A[i - 1];int tar = find(A, i + 1, len - 1, max - 1);if (tar == -1){continue;}if (res < max + tar){res = max + tar;}}return res;
}//法2:直接从尾端查找int largestPerimeter(vector<int>& A) {sort(A.begin(), A.end());for (int i = A.size() - 1; i >= 2; --i) {if (A[i] < A[i - 1] + A[i - 2]) {return A[i] + A[i - 1] + A[i - 2];}}return 0;}

Leetcode每日一题:976.largest-perimeter-triangle(三角形的最大周长)相关推荐

  1. Leetcode PHP题解--D62 976. Largest Perimeter Triangle

    2019独角兽企业重金招聘Python工程师标准>>> D62 976. Largest Perimeter Triangle 题目链接 976. Largest Perimeter ...

  2. Leetcode每日一题——思路小记

    文章目录 LeetCode每日一题 golang T15 2020.6.12 三数之和,双指针的运用 T70 2020.6.13 斐波那契数列 T1014 2020.6.17 最佳观光:双指针,计算公 ...

  3. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  4. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  5. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  6. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  7. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

  8. 【LeetCode每日一题】——109.有序链表转换二叉搜索树

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...

  9. leetcode每日一题·救生艇问题(Python)

    leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...

  10. LeetCode每日一题——904. 水果成篮

    LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...

最新文章

  1. 动态调频DVFS_转
  2. 程序员的二十句励志名言,看看你最喜欢哪句?
  3. 使用Spring的缓存管理器缓存Web内容
  4. 利用modelarts和物体检测方式识别验证码
  5. 用C#连接到数据库实现学生学籍管理系统
  6. 机房三维(3D)监控系统和机房可视化动力环境监控系统两者有什么特点?
  7. erp计算机英语词汇,ERP词汇 - 外贸英语 - 福步外贸论坛(FOB Business Forum) |中国第一外贸论坛...
  8. SAP那些事-理论篇-13-SAP问题解决思路
  9. Sleepy Cow Sorting(树状数组)
  10. Allegro 小知识总结
  11. 高清屏智能手表PSRAM存储芯片APS6404L-SQR-ZR
  12. 第3章 数据分析工具Pandas
  13. Wincc 编辑颜色对应c脚本返回的十进制数
  14. 并行计算:openMP(一)—— parallel,for,sections指令的用法
  15. IOS 上传IPA到AppStore
  16. 分布式、高性能和高可用解决方案 (分布式)
  17. mca允许安装任何来源
  18. Jimu310 数据同步
  19. python版 —— 验证码校验 打码兔平台的使用介绍
  20. Python-批处理调整音频文件的音量大小

热门文章

  1. mysql 查询语句
  2. git---Git中.gitignore配置
  3. 【技术翻译】SIFT算子原理及其实现 (一)介绍
  4. Codeforces 710 E. Generate a String (dp)
  5. selenium 服务器端运行命令
  6. c#不可忍受之慢——谁是罪魁祸首
  7. 在内存流中对象的二进制序列化的问题
  8. [C语言] 单向链表的构建以及翻转算法_图文详解(附双向链表构建代码)
  9. mysqlinsert触发器的创建
  10. (原创)计算机视觉之数学原理-基础篇