611.有效三角形的个数

CloudCompare横截面工具实战:从点云切片到轮廓提取的完整流程 本文详细介绍了CloudCompare软件中Cross Section工具的核心功能与实战流程。从交互式裁剪框的精准操控,到包络线提取的参数设置与优化,再到内部轮廓提取及批量处理技巧,完整解析了如何从三维点云中高效提取建筑立面、隧道断面等关键轮廓信息,是点云数据处理与分析的实用指南。 阅读详情

解题思路

最直观的方法,使用暴力循环。三重循环,满足条件则计数加1.
这里注意要先排序,因为要使得满足组成三角形,则满足任意两条边之和大于第三边。
则可以通过排序使得三条边:a,b,c,中的a + c >b, b+c > a,则只需要判断a+b > c即可。

class Solution {
public int triangleNumber(int[] nums) {
// 排序
Arrays.sort(nums);
int n = nums.length;
int ans = 0;
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]){
ans++;
}
}
}
}
return ans;
}
}
上述的时间复杂度是O(n^3),
如何进一步优化呢?对于a,b,c,我们可以枚举前两个数a,b的下标i,j,然后对于第三个数c的下标k进行二分查找,找出满足条件的k的范围区间,然后累加即可。

class Solution {
    public int triangleNumber(int[] nums) {
        int n = nums.length;
        Arrays.sort(nums);
        int ans = 0;
        for (int i = 0; i < n; ++i){
            for (int j = i+1; j < n; j++){
                // 二分查找
                int left = j+1, right = n - 1, k = j;
                while (left <= right){
                    int mid = (left + right) / 2;
                    if (nums[mid] < nums[i] + nums[j]){
                        k = mid;
                        left = mid + 1;
                    }
                    else{
                        right = mid - 1;
                    }
                }
                ans += k - j; // 区间[j+1, k]
            }
        }
        return ans;
    }
}

上述时间复杂度是O(n^2logn)

如何进一步优化呢?

假设只固定i,则随着j的增加,不等式右侧的nums[i] + nums[j]也是递增的,满足条件的k也是递增的,
这样的话,可以将j和k看成两个同向移动的指针,

使用一重循环枚举i,当i固定,使用双指针同时维护j和k,初始值为i。
将j右移一个位置,并不断尝试向右移动k,使得k是最大的满足nums[k] < nums[i] + nums[j]的下标。
将max(k-j, 0)加入答案。


class Solution {
    public int triangleNumber(int[] nums) {
        int n = nums.length;
        Arrays.sort(nums);
        int ans = 0;
        for (int i = 0; i < n; i++){
            // 枚举j,k
            int k = i;
            for (int j = i + 1; j < n; j++){
                while(k+1 < n && nums[k+1] < nums[i] + nums[j]){
                    ++k;
                }
                ans += Math.max(k - j, 0);
            }
        }
        return ans;
    }
}
多目标跟踪中使用trackeval评估dancetrack运行结果 trackeval使用 阅读详情

相关推荐

青龙面板实战:用快手极速版脚本日赚XX元的核心参数解析

本文深入解析了青龙面板运行快手极速版脚本的核心参数配置,旨在帮助进阶用户提升收益稳定性。重点剖析了设备标识符(did)的获取原理、多账号Cookie的精准拼接规则,以及如何通过科学设置定时任务频率来量化并优化收益,实现细水长流的稳定收益。

weixin_29310605的博客 1074

【优选算法】——Leetcode——611. 有效三角形的个数

给定一个包含非负整数的数组nums,返回其中可以组成三角形三条边的三元组个数。3有效的组合是:2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,34。

小李很执着的博客 1453

PX4无人机PID调参实战:从零到稳定飞行的关键步骤

本文详细介绍了PX4无人机PID调参的实战步骤,从理解双环控制结构到实战调参三部曲,帮助飞手解决飞行抖动、电机发热等常见问题。通过分析飞行日志、调整速率环P值、引入积分I和微调角度环与微分D,实现从零到稳定飞行的关键跨越,是无人机飞控调试的必修课。

weixin_29269441的博客 527

611. 有效三角形的个数

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

weixin_45942644的博客 823

CircuitBreaker Resilience4J 介绍

在分布式环境中,我们的应用可能会面临着各种各样的可恢复的异常(比如超时,网络环境异常),此时我们可以利用不断重试的方式来从异常中恢复(Retry Pattern),使整个集群正常运行。然而,也有一些异常比较顽固,突然发生,无法预测,而且很难恢复,并且还会导致级联失败(举个例子,假设一个服务集群的负载非常高,如果这时候集群的一部分挂掉了,还占了很大一部分资源,整个集群都有可能遭殃)。如果我们这时还是不断进行重试的话,结果大多都是失败的。

zzhongcy的专栏 3540

[V-10]ARMv8/v9-CPU Virtualization-CPU虚拟化架构简介(vCPU/vPE)

本文简要介绍了CPU虚拟化架构的基础知识。

基层架构师的分享 1267

力扣:611. 有效三角形的个数

第二步又细分为两种情况!2.1 当sum的值大于max,可以组成三角形!又因为是数组元素是单调的,所以left后面的数值与right的数值相加都可以组成三角形!即有right-left种情况!再让right--继续进行判断!2.2当sum的值小于等于max时,不能组成三角形,只需要让left++再次进行判断即可求解!(最后当左右指针相遇时本次循环结束!图解:

weixin_71276184的博客 714

软硬件融合加速技术系列文章

目录 文章目录目录计算机组成原理Linux 操作系统原理处理器进程管理内存管理I/O 系统文件系统网络协议栈资源管理设备管理GPUFPGASmartNIC/DPU 计算机组成原理 《计算机组成原理 — 冯诺依曼体系结构》 《计算机组成原理 — 基本硬件设备》 《计算机组成原理 — CPU 中央处理器》 《计算机组成原理 — 指令系统》 《计算机组成原理 — 总线系统》 《计算机组成原理 — 存储系统》 《计算机组成原理 — 输入输出系统 — 存储控制器接口类型》 《计算机组成原理 — 服务器》 《计算机组成

烟云的计算 6806

【双指针】:Leetcode611.有效三角形的个数

LeetCode611.有效三角形个数使用双指针算法解题的详细思路

Yikefore的博客 968

学习笔记:TF卡启动荔枝派Nano(全志F1C200S)

荔枝派Nano编译Kernel报错报错内容如下编译烧录 报错内容如下 No controllers found No ethernet found. 从这些报错我真没看从出啥问题,也是在网上找,说是没有找到flash,是因为淘宝买的板子更换了flash,需要在u-boot里面重新适配型号: 板子的型号为xt25f128,但是实际u-boot的配置里面不是需要重新更改: u-boot/arch/arm/dts/suniv-f1c100s-licheepi-nano.dts &spi0 { pin

热爱科技,物联,程序开发等 2133

WPF实现圆形菜单动态展开折叠效果

实现效果如下: 思路:根据子菜单个数计算旋转角度动态生成子菜单,并设置展开折叠动画。 步骤: 1、自定义按钮MyButton,建立展示图像属性DisplayImage public class MyButton : Button { public static readonly DependencyProperty DisplayImageProperty = DependencyProperty.Register("DisplayImage", typeof(

dnazhd的博客 3149

【双指针】专题:LeetCode 611题解——有效三角形的个数

有效三角形的个数

2401_87255690的博客 1371

FastAPI 高级特性:同异步路由函数、依赖注入与后台任务

在现代 Web 开发中,高效的性能和简洁的代码结构是至关重要的。FastAPI 作为一个现代、快速(高性能)的 Web 框架,凭借其对异步编程的原生支持和直观的依赖注入系统,迅速成为开发者的热门选择。在本文中,将深入探讨 `FastAPI` 中的几个核心概念:同异步函数的区别、`Depends` 依赖以及后台任务。

qq_43629857的博客 203

LeetCode 611. 有效三角形的个数(Valid Triangle Number)

611. 有效三角形的个数 611. Valid Triangle Number 题目描述 LeetCode LeetCode LeetCode611. Valid Triangle Number中等 Java 实现 import java.util.Arrays; class Solution { public int triangleNumber(int[] nums) { ...

weixin_30336061的博客 256

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【力扣-算法】611.有效三角形的个数

已处理区:在比较的过程中利用单调性,在left和right进行比较时,如果left和right加在一起小于分割元素,那么比right小的数跟left相加就更加不可能大于分割元素,那么left就没有组合的比较进入已处理区,而right在跟left相加以后大于分割元素那么中间都大于left就无需比较,通过right 减 left 得到待处理区中除right以外剩下的元素个数就是有效组合的个数。待处理区:没有进行组合的数,用区域中最大值和最小值进行,同时也是待处理区中左右两边的数,用left和right。

shi_r0_ha的博客 693

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LeetCode611. 有效三角形的个数

LeetCode611. 有效三角形的个数 1. 问题描述 2. 思路 三条长度为 a、b、c 的线段,能够组成三角形的充要条件是: a+b>ca + b > ca+b>c a+c>ba + c > ba+c>b b+c>ab + c > ab+c>a 2.1 思路一   解决本题的过程,就是一个搜索的过程。一种解决方案是,获取nums数组中所有长度为3的组合,判断能否满足上面三角形构成的条件。   上述解决方案是使用暴力回溯的方式,从长度为3的组合中

菜到不敢run 524

Leetcode 611. 有效三角形的个数 C++

Leetcode 611. 有效三角形的个数 题目 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。 示例: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 注意: 数组长度不超过1000。 数组里整数的范围为 [0, 1000]。 题解 我们将数组进行逆序排序,依次遍历数组i作为最长边,我们利用两边之和大于最长边这个性质,我们用双指针在i+1~n-1中找到符合要求的边界,用l

weixin_43750513的博客 617

LeetCode 611.有效三角形的个数

有效三角形的判断方法为两边之和大于第三边,所以我们可以先对该数组进行,再对其进行判断。假如我们以,那么先将4固定住,左指针在第一个数,,那么我们首先判断左右指针相加情况,此时大于4,而该数组有序排列,所以可以得出,可以用right-left统计该区间所有有效组合,最后right–继续判断。当right走到2时,left+right<4,,则该区间没有有效组合,可以直接left++,不再关注right往左的情况。

m0_63816268的博客 702

【算法专题】双指针算法之611. 有效三角形的个数(力扣)

双指针算法之611. 有效三角形的个数(力扣)

cilmy23的note 1515

Leetcode.611.有效三角形个数

Leetcode.611.有效三角形个数 题目难度:中等 题目 (官方)思路: 1、三角形满足两边之和大于第三边,或两边之差小于第三边。 2、将数组排序之后 下标 i<j<k,则需要满足条件,nums[i]+nums[j]>nums[k] 3、只需要找到最大的K的下标 求将 k-j累加的值为三角形个数。 java class Solution { public int triangleNumber(int[] nums) { int ans = 0;

不是老哥的博客 253

【611. 有效三角形的个数 】

这个题其实还是双指针的思路,但是确实没想到固定最长边的指针移动。具体思路可以去看灵神的讲解,点击->

爱喝阔落的猫的博客 219

leecode611 有效三角形的个数

这个题感觉和前面不太一样了,双指针的变化规律我没有找出来,当判断出三角形之后我发现无论移动左指针,还是移动右指针,三角形都是成立的。一时半会没想到怎么解决,我就直接暴力破解了,直接遍历所有情况,就可以解决问题了。灵神就是强,当我还再纠结这个无法判断双指针移动方向的时候,灵神已经是另一个境界了,他并不是类似于传统的枚举最短的那一个,而是换了一种思路,枚举最长的。当左边两个短边的和小于等于最外层的时候,三角形不成立,我们要扩大短边的话,直接。的时候,三角形成立,此时从i到j,都是满足条件的三角形(我们不用对。

everything_study的博客 195

【leetcode 611】有效三角形的个数 js

【leetcode 611】有效三角形的个数 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 解法一:枚举 形成三角形的条件:两边之和大于第三边 var triangleNumber = function (arr) { let count = 0; let len = arr.length; for (l

一只蒻蒻的博客 872

Leetcode—611. 有效三角形的个数【中等】

运行结果 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

Atticus的博客 367

【LeetCode: 611. 有效三角形的个数 + 排序 + 双指针】

【LeetCode: 611. 有效三角形的个数 + 排序 + 双指针】给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

Coder_ljw的博客 770

LeetCode 分类刷题:611. 有效三角形的个数

这道题目要求从给定的非负整数数组中找出能构成三角形的三元组个数。关键思路是:先对数组排序,然后枚举最长边c,使用双指针法寻找满足a+b大于c的较短边a和b。当a+b大于c时,i到j-1之间的所有元素与b的组合都满足条件,然后移动j指针;否则移动i指针。时间复杂度为O(n^2),空间复杂度为O(1)。通过排序和双指针技巧,有效地避免了重复统计并优化了查找过程。

flashlight_hi的博客 1310
上一篇: 2197. 替换数组中非互质数
下一篇: 原型模式了解
所谓远行Misnearch
博客等级 码龄3年 1093粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

所谓远行Misnearch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值