611. 有效三角形的个数

611. 有效三角形的个数

原题链接:

611. 有效三角形的个数

https://leetcode.cn/problems/valid-triangle-number/description/

完成情况:

解题思路:

复制代码
//给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。
	//1 <= nums.length <= 1000,最多只能双重for循环
	//怎么样才能组成三角形:   任意两边之和大于第三边,任意两边之差小于第三边
	//那就必须用两根指针,指向最大/最小,然后再开始移动

参考代码:

java 复制代码
package 西湖算法题解___中等题;

import java.lang.reflect.Array;
import java.util.Arrays;

public class __611有效三角形的个数 {
	public int triangleNumber(int[] nums) {
		//给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。
		//1 <= nums.length <= 1000,最多只能双重for循环
		//怎么样才能组成三角形:   任意两边之和大于第三边,任意两边之差小于第三边
		//那就必须用两根指针,指向最大/最小,然后再开始移动
		if (nums.length < 3){
			return 0;
		}
		int res = 0;
		Arrays.sort(nums);
		for (int i=nums.length -1;i>=2;i--){
			int left = 0,right = i-1;
			while (left < right){
				if (nums[left] + nums[right] <= nums[i]){
					left++;     //说明数小了
				}else { //说明当前数已经满足了要求,即当前范围内的任意值,我都可以取
					res += right - left;
					//这里就需要更换数值,避免使用到重复位置
					res += right - left;
					//left++;
					// 并且只能使用right--;,因为你的上一个res += right - left;里面其实就已经包含了下一个left++的位置情况
				}
			}
		}
		return res;
	}
}
相关推荐
一只乔哇噻几秒前
java后端工程师进修ing(研一版 || day41)
java·开发语言·学习·算法
愚润求学2 分钟前
【贪心算法】day7
c++·算法·leetcode·贪心算法
User_芊芊君子18 分钟前
【Java】设计模式——单例、工厂、代理模式
java·设计模式·代理模式
2301_8035545227 分钟前
正向代理,反向代理,负载均衡还有nginx
java·nginx·负载均衡
要开心吖ZSH28 分钟前
软件设计师备考-(十六)数据结构及算法应用(重要)
java·数据结构·算法·软考·软件设计师
向上的车轮37 分钟前
基于Java Spring Boot的云原生TodoList Demo 项目,验证云原生核心特性
java·spring boot·云原生
程序员清风39 分钟前
快手一面:为什么要求用Static来修饰ThreadLocal变量?
java·后端·面试
逍遥德39 分钟前
Java8 Comparator接口 和 List Steam 排序使用案例
java·spring boot·list·排序算法
带娃的IT创业者41 分钟前
如何开发一个教育性质的多线程密码猜测演示器
网络·python·算法
前行的小黑炭1 小时前
Android :如何快速让布局适配手机和平板?
android·java·kotlin