当前位置: 首页 > news >正文

leecode611 有效三角形的个数

在这里插入图片描述

我的思路(暴力解)

这个题感觉和前面不太一样了,双指针的变化规律我没有找出来,当判断出三角形之后我发现无论移动左指针,还是移动右指针,三角形都是成立的。一时半会没想到怎么解决,我就直接暴力破解了,直接遍历所有情况,就可以解决问题了。

public int triangleNumber(int[] nums) {Arrays.sort(nums);int n = nums.length;int ans=0;for(int i = 0;i<n-2;i++){int x = nums[i];for(int j = i+1;j<n-1;j++){int k = n-1;while(j<k){int y = nums[i]+nums[j]-nums[k];if(y>0){ans++;}k--;}}}return ans;
}

优化方案,我发现这个ans不用每次都进行++,可以直接统计出来所有满足的。

while(j<k){int y = nums[i] + nums[j] - nums[k];if (y > 0) {int len = k-j;ans+=len;break;}k--;                   
}

灵神思路

灵神就是强,当我还再纠结这个无法判断双指针移动方向的时候,灵神已经是另一个境界了,他并不是类似于传统的枚举最短的那一个,而是换了一种思路,枚举最长的。让最外层从i=2开始,然后让j和k是i的左边的边。

此时双指针就很容易的判断出移动方向了

当左边两个短边的和 nums[j]+nums[k]大于 最外层的nums[i]的时候,三角形成立,此时从i到j,都是满足条件的三角形(我们不用对j进行++了),我们将其加入结果ans += j - i;,然后k--

当左边两个短边的和小于等于最外层的时候,三角形不成立,我们要扩大短边的话,直接j++

class Solution {public int triangleNumber(int[] nums) {Arrays.sort(nums);int ans = 0;for (int k = 2; k < nums.length; k++) {int c = nums[k];int i = 0; // a=nums[i]int j = k - 1; // b=nums[j]while (i < j) {if (nums[i] + nums[j] > c) {// 由于 nums 已经从小到大排序// nums[i]+nums[j] > c 同时意味着:// nums[i+1]+nums[j] > c// nums[i+2]+nums[j] > c// ...// nums[j-1]+nums[j] > c// 从 i 到 j-1 一共 j-i 个ans += j - i;j--;} else {// 由于 nums 已经从小到大排序// nums[i]+nums[j] <= c 同时意味着// nums[i]+nums[j-1] <= c// ...// nums[i]+nums[i+1] <= c// 所以在后续的内层循环中,nums[i] 不可能作为三角形的边长,没有用了i++;}}}return ans;}
}
作者:灵茶山艾府
链接:https://leetcode.cn/problems/valid-triangle-number/solutions/2432875/zhuan-huan-cheng-abcyong-xiang-xiang-shu-1ex3/
来源:力扣(LeetCode
http://www.dtcms.com/a/307624.html

相关文章:

  • 基于N32G45x+RTT驱动框架的定时器外部计数
  • WebMvcConfigurer配置接口详解
  • ClickHouse vs PostgreSQL:数据分析领域的王者之争,谁更胜一筹?
  • 模型优化——在MacOS 上使用 Python 脚本批量大幅度精简 GLB 模型(通过 Blender 处理)
  • 【linux驱动开发】Vscode + Remote SSH + clangd + bear=内核源码阅读环境搭建
  • Visual Studio Code (VSCode) 的常用快捷键
  • 33.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--财务服务--记账
  • Shader开发(五)什么是渲染管线
  • 【大模型理论篇】混合思考之自适应思维链
  • day28_2025-07-31
  • 基于京东评论的文本挖掘与分析,使用LSTM情感分析算法以及网络语义分析
  • 【数据结构】算法代码
  • 前端框架Vue3(三)——路由和pinia
  • 分布内侧内嗅皮层的层Ⅱ或层Ⅲ的网格细胞(grid cells)对NLP中的深层语义分析的积极影响和启示
  • vue3.0 +TypeScript 项目中pinia基础语法和使用
  • 【大数据】open_metadata 开源元数据管理平台建设与数据血缘实践
  • 「源力觉醒 创作者计划」开源大模型重构数智文明新范式
  • AI任务相关解决方案12-NLP的15项任务大融合系统:传统NLP与Qwen大模型的深度结合
  • NTLDR源代码分析之从GetSector函数到blread函数
  • 解决 IntelliJ IDEA Build时 Lombok 不生效问题
  • 商旅平台怎么选?如何规避商旅流程中的违规风险?
  • 【未解决】STM32无刷电机驱动电路问题记录
  • .NET Core部署服务器
  • 智慧收银系统开发进销存库存统计,便利店、水果店、建材与家居行业的库存汇总管理—仙盟创梦IDE
  • Spring Boot 异常处理:从全局捕获到优化用户体验!
  • PostgreSQL面试题及详细答案120道(01-20)
  • 解放双手!Report Distro 实现报表自动化分发
  • 微软发布Microsoft Sentinel数据湖国际版
  • SecurityContextHolder 管理安全上下文的核心组件详解
  • 【STM32】HAL库中的实现(一)GPIO/SysTick/EXTI