算法题->有效的三角形个数C语言和JAVA版本双指针解法

有效的三角形个数C语言和JAVA版本双指针解法

力扣链接:https://leetcode.cn/problems/valid-triangle-number/description/

题目描述:在这里插入图片描述

题意:给你一个数组,通过数组中的三个值进行组成有效三角形,最后返回有效三角形个数

例子:

在这里插入图片描述

由例子可知,不同下标的一个值和相同两个值组成的三角形,是两个三角形.

思路:双指针 + 单调性.对数组进行一个排序(可以保证数组大小从小到大排序,可以减少判断是否为三角形的条件)并创建两个双指针,固定右下标 对应值和右下标 - 1对应值,判断左下标对应值 + (右下标 - 1) 对应值是否大于右下标对应值.如果大于右下标值,证明当右下标 - 1对应值不变时,left改变,那么必然都是大于右下标对应值.三角形个数改变,再改变右侧值,重复比较.

判断大小图例:

在这里插入图片描述

如果小于第三边图例:

在这里插入图片描述

判断完成改变右侧值,重新循环图例:

在这里插入图片描述

步骤:

1.排序数组

2.创建双指针,获取对应值

3.比较大小,并根据大小对双指针进行变动

4.单次循环结束,改变双指针,重复循环.

C语言代码如下:

void sort(int* nums,int numsSize) {for(int i = 0;i < numsSize;i++) {for(int j = 0;j < numsSize - i - 1;j++) {if(nums[j] > nums[j + 1]) {int tmp = nums[j];nums[j] = nums[j + 1];nums[j + 1] = tmp;}}}
}
int triangleNumber(int* nums, int numsSize) {int count = 0;int right = numsSize - 1;//1.排序sort(nums,numsSize);//2.循环判断是否固定一个值结束while(right >= 2) {//当元素个数小于2个则无法进行判断int left = 0;int tmp = right - 1;while(tmp > left) {if(nums[tmp] + nums[left] > nums[right]) {//判断是否有效三角形count += tmp - left;tmp--;}else {left++;}}right--;//改变外层循环}//3.循环判断是否为三角形return count;
}

JAVA代码如下:

class Solution {public int triangleNumber(int[] nums) {Arrays.sort(nums);int count = 0;int i = nums.length - 1;while(i >= 2) {int left = 0;int right = i - 1;while(left < right) {if(nums[left] + nums[right] > nums[i]) {count += right - left;right--;}else {left++;}}i--;}return count;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++杂货铺】详解list容器

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 介绍 &#x1f4c1; 使用 &#x1f4c2; 构造 &#x1f4c2; 迭代器iterator &#x1f4c2; capacity &#x1f4c2; modifiers &#x1f4c2; 迭代器失效 &#x1f4c1; 模拟实现 &#x1f4c2; 迭代器的实现 &#x…

基于springboot实现房屋租赁管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现房屋租赁系统演示 摘要 房屋是人类生活栖息的重要场所&#xff0c;随着城市中的流动人口的增多&#xff0c;人们对房屋租赁需求越来越高&#xff0c;为满足用户查询房屋、预约看房、房屋租赁的需求&#xff0c;特开发了本基于Spring Boot的房屋租赁系统。 …

Datacom HCIP笔记-ISIS协议

IS中间系统&#xff08;路由器/运行了ISIS协议的设备&#xff09; ES终端系统(PC,PAD,print) 网络功能模型 ISO定义 事实标准 OSI TCP/IP 网络层(CLNP) (IS-IS) 网络…

python爬虫+django新闻推荐系统可视化分析

1. 安装python3.7.0 2. 更新pip 控制台执行 python -m pip install -U pip 3. 安装依赖库 pip install -r requirements.txt 4. 更改mysql数据库配置 修改newsServer/settings.py中的数据库连接配置&#xff0c;比如修改下方PASSWORD密码为本机mysql密码&#xff1…

【工具-MATLAB】

MATLAB ■ MATLAB-简介■ MATLAB-应用领域■ MATLAB■ MATLAB■ MATLAB■ MATLAB ■ MATLAB-简介 MATLAB是matrix&laboratory两个词的组合&#xff0c;意为矩阵工厂&#xff08;矩阵实验室&#xff09; 美国MathWorks公司出品的商业数学软件, MATLAB和Mathematica、Maple并…

Android自定义view,自定义控件(kotlin版)–圆形进度条

Android自定义view&#xff0c;自定义控件(kotlin版)–圆形进度条 b站视频教程地址&#xff1a;https://www.bilibili.com/video/BV1pJ4m1j72c/?spm_id_from333.999.0.0 源码在视频中。。。。 上效果图&#xff0c;csdn不知道怎么上传动图&#xff0c;&#xff0c;&#xf…

学透Spring Boot 003 —— Spring 和 Spring Boot 常用注解(附面试题和思维导图)

这是 学透 Spring Boot 专栏 的第三篇&#xff0c;欢迎关注我&#xff0c;与我一起学习和探讨 Spring Boot 相关知识&#xff0c;学透 Spring Boot。 从面试题说起 今天我们通过一道和Spring Boot有关的常见面试题入手。 面试题&#xff1a;说说 Spring Boot 中有哪些常用注解…

记一道文件上传

林深时遇见鹿&#xff0c;海蓝时遇见鲸。 首先先随便上传一个文件&#xff0c; 经测试php相关后缀都不能上传&#xff0c;且<?被过滤。 而且.user.ini里的file也被过滤了 所以只能使用.htaccess了 但是<?被过滤了&#xff0c;所以我们可以使用php伪协议来用base64加…

element-ui message 组件源码分享

今日简单分享 message 组件的源码&#xff0c;主要从以下四个方面来分享&#xff1a; 1、message 组件的页面结构 2、message 组件的 options 配置 3、mesage 组件的方法 4、个人总结 一、message 组件的页面结构 二、message 组件的 options 配置 前置说明&#xff1a;m…

Docker容器与虚拟化技术:OpenEuler 部署 ES 与 Kibana

目录 一、实验 1.环境 2.OpenEuler 部署 ES (EalasticSearch) 3.OpenEuler 部署 Kibana 4.部署 Elasticvue插件 5.使用cpolar内网穿透 6.使用Elasticvue 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统架构版本IP备注LinuxopenEuler22.03 LTS SP2 1…

R语言技能 | 不同数据类型的转换

原文链接&#xff1a;R语言技能 | 不同数据类型的转换 本期教程 写在前面 今天是4月份的第一天&#xff0c;再过2天后再一次迎来清明小假期。木鸡大家是否正常放假呢&#xff1f; 我们在使用R语言做数据分析时&#xff0c;会一直对数据进行不同类型的转换&#xff0c;有时候…

Springboot工程依赖包与执行包分离打包与构建docker 镜像

文章目录 一、概述二、工程概况1. 代码原始结构2. 运行界面 三、常规打包1. 打包命令2. jar包结构 四、分离依赖包、执行包步骤1. 引入依赖包管理插件2. 打包验证 五、分离后构建docker 镜像1. 借助Dockerfile2. docker-maven-plugin实现 六、版本升级 一、概述 某大数据项目&…