有效三角形个数问题

news2024/9/20 18:29:12

目录

一·题目简述:

二·思路总结:

2·1不被认可的暴力破解思路:

2·2优化后的思路:

2·2·1优化后的判断三角形方法:

2·2·2 定一动二指针朝内筛选遍历: 

三·解答代码:


一·题目简述:

leetcode链接:. - 力扣(LeetCode) 

二·思路总结:

2·1不被认可的暴力破解思路:

想必大家看到这道题首先一定想的就是三次循环嵌套,然后再加上判断三角形(任意两边都大于第三步)来完成此操作。伪代码:

for (int i = 0; i < nums.size()-2; i++) {
    for (int j = i + 1; j < nums.size() - 1; j++)
    {
        for (int k = j + 1; k < nums.size(); k++) {
            check_triangle(nums[i], nums[j],nums[k])//判断是否为三角形
        }
    }
}

然而这种复杂度直接到了o(n^3);因此要换一种思路。

2·2优化后的思路:

2·2·1优化后的判断三角形方法:

想必正常都是 要么任意两边都大于第三步,要么两边差小第三边,两边和大第三边。

但是这种就是新的方法:如果我们把这组数据排好序,拿到最大的数,然后让比它小两个数之和跟它比较,便可以一步得出:

2·2·2 定一动二指针朝内筛选遍历: 

思路:固定最大值+双指针筛选朝里遍历:
为了减少判断三角形(任意两边都大于第三边),升级版:首先让数组内值有序,然后只需要判断另两个值是否大于最大值即可,如果大于
就是符合,否则不符合,然后固定数前面的,
如果大于:最小值前面的与它组合都会大于,故right--(此时right这个位置的数已完成了此次任务)
如果小于:则最小值加上此值前面比它小的值,然后都比它小故left++

下面画图展示一下:

  

 此时时间复杂度直接从o(n^3)变成了o(n^2)。

三·解答代码:

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
         sort(nums.begin(),nums.end(),less<int>());//按升序,方便减少判断三角形时的比较操作
        int ret=0;//统计个数
         for(int i=nums.size()-1;i>=2;i--){//固定的最大值从右往左走
            int left=0,right=i-1;
            while(left<right){

                if(nums[left]+nums[right]>nums[i]) ret+=right-left,right--;//符合三角形条件

                else left++;
            }
         }
         return ret;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

500以内有好用的开放式耳机推荐吗?五款500以内开放式耳机推荐

作为一个几乎醒了就离不开耳机的人&#xff0c;我经常在思考什么样子的耳机才能做到佩戴无感、不塞耳、没有胀痛&#xff0c;还可以随时为我们提供高品质音乐呢&#xff1f;划拉来&#xff0c;划拉去还是觉得开放式耳机比较适合&#xff0c;它不入耳的设计能够让空气在耳朵流通…

基于大模型 + 知识库的 Code Review 实践

背景 &#x1f4a1; 想法源于在一次 Code Review 时&#xff0c;向 Claude 询问哪种写法代码更优雅得来。当时就想能不能让 AI 帮我们辅助做 Code Review&#xff1f; 痛点 信息安全合规问题&#xff1a;公司内代码直接调 ChatGPT / Claude 会有安全/合规问题&#xff0c;为了…

HR招聘,如何解决面试流程繁琐的问题

要解决面试流程繁琐的问题&#xff0c;就必须要精简和优化招聘流程。比如精简面试环节&#xff0c;制定标准化流程&#xff0c;完善信息管理&#xff0c;对面试环节进行细致梳理之后&#xff0c;尽快识别并去除那些不必要的步骤&#xff0c;这样就能够减少求职者的等待时间&…

零成本搭建个人 APP 和小程序后台

前言 前面也说了&#xff0c;通过 GitHub PagesGitHub Actions 只是解决了动态数据展示&#xff0c;但是要零成本得完成将用户信息存储下来&#xff0c;并实现数据交互呢&#xff1f; 我开始是想用云文档&#xff0c;种种原因&#xff0c;我还是希望有个自己能二次修改的后台…

动态网格交易、科创板做市、股票 CTA……DolphinDB 中高频策略回测实例之股票篇

股票中高频交易是量化交易的重要分支&#xff0c;其核心在于在极短时间内处理大量市场数据&#xff0c;执行多笔交易&#xff0c;从而捕捉细微的价格波动并获取利润。中高频交易策略的成功依赖于精准的算法设计、低延迟的交易系统以及交易程序强大的数据分析能力。作为实盘操作…

【系统架构设计】设计模式

【系统架构设计】设计模式 设计模式概述GoF设计模式Factory MethodAbstract Factory &#xff08;*&#xff09;BuilderPrototype(原型)Singleton&#xff08;*&#xff09;AdapterBridgeComposite(组合)Decorator(装饰)&#xff08;*&#xff09;Facade(外观)&#xff08;*&am…

恢复指定人微信聊天记录,看这里,4种方法帮您找回记录

微信在今天成为了我们日常生活中不可或缺的一部分&#xff0c;它承载着我们的社交、工作乃至生活的点点滴滴。然而&#xff0c;有时出于各种原因&#xff0c;我们可能会选择注销微信账号&#xff0c;但随后又可能因种种原因希望恢复其微信进行使用。那么&#xff0c;微信注销了…

CSS溢出——WEB开发系列20

在网页设计中&#xff0c;“溢出”是一个常见且重要的概念。它涉及到如何处理那些超出预定范围的内容&#xff0c;以确保网页的布局和视觉效果达到预期。 一、什么是溢出&#xff1f; 在 CSS 中&#xff0c;“溢出”&#xff08;overflow&#xff09;指的是内容超出其包含块的…

构建高效NLP管道:PydanticOutputParser与Langchain的结合

PydanticOutputParser 是一个用于解析语言模型输出的实用工具&#xff0c;它允许用户指定一个 Pydantic 模型&#xff0c;并查询语言模型以生成符合该模型的 JSON 输出。这个工具特别有用&#xff0c;因为它可以帮助开发者确保从语言模型获得的结构化数据符合预期的格式&#x…

全面解析:四大LLM模型——预训练与后训练的新范式

导读 最初&#xff0c;大语言模型LLM的训练过程只关注于预训练&#xff0c;但如今已经扩展到包含预训练和后训练两个阶段。后训练通常包括监督指令微调和对齐&#xff0c;这一方法在ChatGPT发布后广泛流行&#xff01; 翻译自:https://magazine.sebastianraschka.com/p/new-l…

NAT网关产品手册

产品用途 SG-NAT-410 网关支持 IP 地址跨网段和通讯端口的转换&#xff0c;为不方便修改参数的以太网通讯设备的信息化联网提供便捷的解决方案。网关有 1 个两口以太网交换机接口(LAN 口 ) 和 1 个单口以太网通讯接口 (WAN 口 ) 。不对原系统做任何硬件和软件修改&…

WAF一般是怎么防御SQL注入的

目录 参数化查询在防止SQL注入中起到什么作用&#xff1f; 为什么要限制数据库用户权限来预防SQL注入&#xff1f; WAF是如何检测SQL注入特征的&#xff1f; WAF防范SQL注入的主要策略包括&#xff1a; 参数化查询和预编译语句&#xff1a;使用参数化查询或预编译语句可以确…

虚拟试穿技术分享

虚拟试穿技术&#xff0c;通过计算机视觉和人工智能&#xff0c;允许用户在数字界面上试穿服装&#xff0c;无需实际穿戴。这项技术广泛应用于电子商务和时尚工业&#xff0c;使得消费者可以在购买前预览衣物在自己身上的样子。 基于扩散的方法&#xff1a;这种方法使用基于图像…

微波网络分析仪VNA原理详解:电磁波测量基础-测试狗科研测试

微波网络分析仪VNA原理详解&#xff1a;电磁波测量基础 微波网络分析仪&#xff08;Vector Network Analyzer&#xff0c;简称VNA&#xff09;是一种用于测试和测量微波频段元件和网络特性的电子测试设备。 一、电磁波 电磁波是由电场和磁场相互垂直并相互依赖振荡传播的波动现…

餐饮商标怎么注册自己的品牌!

餐饮行业是创业者选的比较多的行业&#xff0c;也有许多人从小做起&#xff0c;成为当地知名品牌&#xff0c;那企业或个体户如何注册餐饮行业的商标。 在餐饮行业首先是申请注册类别43类餐饮住宿&#xff0c;这个是餐饮的核心类别&#xff0c;开店、饭店都在这个类别&#xf…

学习之adb命令

adb命令作用&#xff1a; 用来操作手机系统的 类似于window的cmd,linux的bash 如果添加环境变量的adb不能识别设备通常是因为存在两个不同的版本 如下&#xff1a; adb devices 如果没有发现&#xff0c;可以尝试手动连接设备 需要先执行 adb kill-server adb start-server …

前端模块自动导入的插件

前言 开发中通常会有很多导入语句&#xff0c;如何确保一些通用的api和hook无需每次手动导入即可使用。 <script setup lang"ts"> import { ref, reactive } from "vue" import { useRoute, useRouter } from "vue-router" import { log…

【Spring】Cookie和Session

系列文章目录 第一章 初识Spring MVC 文章目录 系列文章目录前言一、Cookie和Session二、Cookie操作获取Cookie指定Cookie 三、Session操作设置Session数据获取Session数据 四、获取Header总结 前言 HTTP是"无状态"的协议&#xff0c;我们可以理解为它没有记忆力。…

UnrealEngine学习(02):虚幻引擎编辑器界面详解

学习一款软件&#xff0c;我个人建议是先学习怎么用&#xff0c;然后是学习怎么用的好&#xff0c;再研究源码。 上一篇文章详细描述了我们该如何安装虚幻5引擎&#xff1a; UnrealEngine学习(01)&#xff1a;安装虚幻引擎https://blog.csdn.net/zuodingquan666/article/deta…

Kubernetes存储Volume

数据是一个企业的发展核心,他涉及到数据存储和数据交换的内容。在生产环境中尤为重要的一部分&#xff0c;在 Kubernetes 中另一个重要的概念就是数据持久化 Volume。 一、Volume的概念 对于大多数的项目而言&#xff0c;数据文件的存储是非常常见的需求&#xff0c;比如存储用…