专题一 -双指针 - leetcode 611. 有效三角形的个数 | 中等难度

leetcode 611. 有效三角形的个数

  • leetcode 611. 有效三角形的个数 | 中等难度
    • 1. 题目详情
      • 1. 原题链接
      • 2. 基础框架
    • 2. 解题思路
      • 1. 题目分析
      • 2. 算法原理
      • 3. 时间复杂度
    • 3. 代码实现
    • 4. 知识与收获

在这里插入图片描述

leetcode 611. 有效三角形的个数 | 中等难度

1. 题目详情

给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

示例 1:
输入: nums = [2,2,3,4]
输出: 3
解释:有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3

示例 2:
输入: nums = [4,2,3,4]
输出: 4

提示:
1 <= nums.length <= 1000
0 <= nums[i] <= 1000

1. 原题链接

leetcode 611. 有效三角形的个数

2. 基础框架

● Cpp代码框架

class Solution {
public:
    int triangleNumber(vector<int>& nums) {

    }
};

2. 解题思路

1. 题目分析

( 1 ) (1) (1) 题目要求数组nums中所有的满足构成三角形的三个数的组合个数。
( 2 ) (2) (2) 对于a/b/c三边,构成三角形的条件是任意两边之和大于第三边:
a+b>c&&a+c>b&&b+c>a

2. 算法原理

( 1 ) (1) (1) 首先呢先想到暴力解法:三层for循环依次确定三个边a/b/c,并判断a+b>c&&a+c>b&&b+c>a,都满足了计数才自增;时间复杂度O(n^3),直接提交leetcode不给过。
进行优化:先对数组nums排序,对于有序的数组而言,依次确定数组左边的较小得数a/b,c在a/b之后确定。此时可以满足关系:a <= b <= c;故a+b>c&&a+c>b&&b+c>aa+c>bb+c>a是一定成立的,就不用再判断了,减少两次判断,此时就可以通过了。时间复杂度还是O(n^3)。
( 2 ) (2) (2) 解法二:借助有序数组的单调性解题。
还是先对数组nums进行排序,满足关系:a <= b <= c
在这里插入图片描述

( 3 ) (3) (3)

3. 时间复杂度

暴力解法 : O ( n 3 ) O(n^3) O(n3)

对撞双指针: O ( n 2 ) O(n^2) O(n2)

利用单调性,外层循环确定一个数,内层循环确定两个数,减少一层循环。

3. 代码实现

解法一:暴力搜索(也叫遍历)

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        // a+b>c a+c>b b+c>a
        int cnt = 0;
        int n = nums.size();
        sort(nums.begin(), nums.end());
        for(int i = 0; i < n; i++){
            for(int j = i + 1; j < n; j++){
                for(int k = j + 1; k < n; k++){
                    // if(nums[i] + nums[j] > nums[k]
                    // && nums[i] + nums[k] > nums[j]
                    // && nums[j] + nums[k] > nums[i]){
                    if(nums[i] + nums[j] > nums[k]){
                        cnt++;
                    }
                }
            }
        }
        return cnt;
    }
};

解法二:对撞双指针

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        // 结果计数
        int cnt = 0;
        int n = nums.size();
        // 排序
        sort(nums.begin(), nums.end());
        for(int i = n - 1; i >= 0; i--){
            // 对撞双指针
            int l = 0, r = i - 1;
            while(l < r){
                int sum = nums[l] + nums[r];
                
                if(sum > nums[i]){
                    // a+b>c
                    cnt += r - l;
                    r--;
                }
                else{
                    // a+b<=c
                    l++;
                }
            }
        }
        return cnt;
    }
};

4. 知识与收获

( 1 ) (1) (1) 感受双指针对时间复杂度的降维能力把。


T h e The The E n d End End

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM技术的分布式销售平台设计与实现

目 录 摘 要 I Abstract II 1 绪论 1 1.1 课题研究背景与意义 1 1.2 国内外研究现状 1 1.2.1 国外研究现状 1 1.2.2 国内研究现状 2 1.3 本章小结 2 2 工程开发技术介绍 3 2.1 Web前端技术栈 3 2.1.1 HTML&CSS 3 2.1.2 jQuery 3 2.1.3 JSP 3 2.2 服务端开发技术栈 3 2.2.1…

ChatGPT 升级出现「我们未能验证您的支付方式/we are unable to authenticate」怎么办?

ChatGPT 升级出现「我们未能验证您的支付方式/we are unable to authenticate」怎么办&#xff1f; 在订阅 ChatGPT Plus 时&#xff0c;有时候会出现以下报错 &#xff1a; We are unable to authenticate your payment method. 我们未能验证您的支付方式。 出现 unable to a…

基于apicloud+vue的汽车服务系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 课题背景 3 1.1 课题的研究背景与意义 3 1.2研究现状 3 1.3本章小结 4 2 系统开发相关技术 5 2.1 ApiCloud开发工具 5 2.2 MVC架构模型 5 2.3 MySQL数据库 5 2.4 Hibernate、Spring框架 6 2.5 本章小结 6 3 系统分析 7 3.1 系统需求分析 …

Uber/Google Golang编码标准深度分析

良好的代码风格对于开发优秀的产品至关重要&#xff0c;本文通过分析比较三部流传甚广的Golang代码风格指南&#xff0c;介绍了Go代码风格要点&#xff0c;并介绍了通过工具实现代码检查的方式。原文: Mastering Go: In-Depth Analysis of Uber and Google’s Coding Standards…

启动vue项目执行npm run serve报错 : error in ./src/element-variables.scss

error in ./src/element-variables.scss 问题原因 node-sass的版本问题 解决方式 我直接更新了一下node-sass&#xff0c;就好了 npm install node-sass 再次执行就可以执行成功了

双色球选号 python

题目描述 编写一个能实现双色球选号的小程序。双色球选号由7个数字组成&#xff0c;其中有6个红球&#xff0c;其号码的取值范围为[1,33];一个蓝球的取值范围为[1,16],要求6个红球从小到大排列&#xff0c;蓝球在最后输出。其输出格式为09 12 16 20 30 33 | 03。&#xff08;注…

SpringMVC03、HelloSpring

3、HelloSpring 3.1、配置版 新建一个Moudle &#xff0c; springmvc-02-hello &#xff0c; 添加web的支持&#xff01; 确定导入了SpringMVC 的依赖&#xff01; 配置web.xml &#xff0c; 注册DispatcherServlet <?xml version"1.0" encoding"UTF-8…

软件工程顶会——ICSE '24 论文清单、摘要

1、A Comprehensive Study of Learning-based Android Malware Detectors under Challenging Environments 近年来&#xff0c;学习型Android恶意软件检测器不断增多。这些检测器可以分为三种类型&#xff1a;基于字符串、基于图像和基于图形。它们大多在理想情况下取得了良好的…

Vue时间轴

之前有这样子的需求没有用第三方插件于是自己写一个简单的时间轴 时间轴滚动条并左右切换滚动条位置相对应移动 <div class"time-scrollbar"><div v-if"timeLineData.length>0" class"scrollbar-content"><div class"ar…

基于FastAPI构造一个AI模型部署应用

前言 fastapi是目前一个比较流行的python web框架&#xff0c;在大模型日益流行的今天&#xff0c;其云端部署和应用大多数都是基于fastapi框架。所以掌握和理解fastapi框架基本代码和用法尤显重要。 需要注意的是&#xff0c;fastapi主要是通过app对象提供了web服务端的实现代…

Java+SpringBoot+Vue+MySQL实战:打造智能餐厅点餐系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

图机器学习(3)-连接层面的特征工程

0 问题定义 通过已经连接去猜未知连接&#xff1a; 有两个思路&#xff1a;

基于FPGA加速的bird-oid object算法实现

导语 今天继续康奈尔大学FPGA 课程ECE 5760的典型案例分享——基于FPGA加速的bird-oid object算法实现。 &#xff08;更多其他案例请参考网站&#xff1a; Final Projects ECE 5760&#xff09; 1. 项目概述 项目网址 ECE 5760 Final Project 模型说明 Bird-oid object …

基于springboot实现大学生兼职网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现大学生兼职系统演示 摘要 现代化的市场中&#xff0c;人们日常的工作、生活都在不断的提速&#xff0c;而人们在工作与生活中与互联网的结合也越来越紧密&#xff0c;通过与互联网紧密的结合可以更好地实现日常工作的线上化、信息化、便捷化。现如今的各行各…

案例研究|辛格林电梯借助DataEase实现数据整合与智能展示

辛格林电梯&#xff08;SIGLEN&#xff09;于2012年创立&#xff0c;是电梯领域的领军品牌之一。该公司总部位于广东佛山&#xff0c;是全国首批获得A1级电梯制造资质的企业&#xff0c;拥有省级工程技术研究中心。辛格林电梯专注于研发和生产高品质电梯产品&#xff0c;涵盖别…

Spring Security认证授权流程详解

认证的工作原理 过滤链 Spring Security框架的作用就是安全访问控制即对所有进入系统的请求进行拦截, 校验每个请求是否能够访问到它所期望的资源 通过Filter或AOP等技术可以实现安全访问控制功能,而Spring Security对Web资源的保护是靠Filter实现的,Spring Security有一个过…

Linux运维工程师不可或缺的10款工具

运维工程师在日常工作中频繁运用的10款工具&#xff0c;并细致阐述每款工具的功能、适用场景以及其卓越之处。 1. Shell脚本&#xff1a; 功能&#xff1a;主要用于自动化任务和批处理作业。 适用场景&#xff1a;频繁用于文件处理、系统管理、简单的网络管理等操作。 优势&…

【学习教程】Vision Pro:开发学习资源

unity 官方网站上线了一款课程,准备好迎接 Apple Vision Pro:免费学习资源汇总。 本合集则是为想要探索 Apple Vision Pro 的创作者提供全方位指导, 由浅入深,与你一同创造前所未有的 沉浸式空间交互体验 的新奇内容。 合集包含最新的开发技术文档。从入门的基础知识核心…

基于vue的联通积分商城数据可视化APP设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 前端技术介绍 3 1.1 前端开发语言 3 1.1.1 HTML5 3 1.1.2 CSS3 3 1.1.3 JavaScript 3 1.2 MVVM开发模式 4 1.3 Vue框架 4 1.4 Axios技术 5 1.5 ECharts 5 1.6 数据库技术 5 1.7 本章小结 6 2 前端开发的分析 7 2.1 功能性需求分析 7 2.2 …

Navicat连接数据库出现的问题

Navicat使用教程——连接/新建数据库、SQL实现表的创建/数据插入、解决报错【2059-authentication plugin‘caching_sha2_password’……】_2059authentication plugin-CSDN博客