Java实现三角形计数
题:

解:
这道题考的是穷举的算法。
一开始看到这道题的时候,本能的想到用递归实现。但使用递归的话数据少没问题,数据多了之后会抛栈溢出的异常。我查了一下,原因是使用递归创建了太多的变量,
每个变量创建的时候都会有一个“栈帧”,而Java虚拟机对栈帧有限制,不能超出一个范围。
并且递归和循环相比,递归的效率明显比循环低下,如果想要写一个算法的话,尽量不要使用递归,一方面是因为递归会创建很多变量,占用内存,另一方面是递归极容
易无限递归。
---------------
最后使用循环嵌套的方式完成了。
代码:
package com.lintcode; /**
* 三角形计数
* 给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,
* 问,可以寻找到多少组这样的三个数来组成三角形?
* @author Administrator
*/
public class Test_003 {
// 这道题不能用递归,数据少的话还可以,但是多了就会堆栈溢出。
// 这道题就是考“穷举”,列出所有的可能性,再判断。三角形三个边需要三个数字,就循环嵌套三层。
// 然后找出三个数字中最大的和最小的和中间数,判断是否构成三角形。
/**
* @param args
*/
public static void main(String[] args) {
int[] S = new int[200];
for (int i = 0; i < 200; i++) {
S[i] = i+1;
}
int count = triangleCount(S);
System.out.println(count);
} public static int triangleCount(int S[]) {
int count = 0;
for(int i=0; i<S.length-2; i++){//第一条边
for (int j = i+1; j < S.length-1; j++) {//第二条边
for (int k = j+1; k < S.length; k++) {//第三条边
int min = getMin(S[i],S[j],S[k]);
int max = getMax(S[i],S[j],S[k]);
int middle = S[i]+S[j]+S[k]-min-max;
if ((min+middle)>max || (min==max)) {
count++;
}
}
}
}
return count;
}
//求最小值
private static int getMin(int a, int b, int c) {
int min = a;
if (min>b) {
min=b;
}
if (min>c) {
min=c;
}
return min;
}
//求最大值
private static int getMax(int a, int b, int c) {
int max = a;
if (max<b) {
max=b;
}
if (max<c) {
max=c;
}
return max;
}
}
Java实现三角形计数的更多相关文章
- 基于mapreduce实现图的三角形计数
源代码放在我的github上,想细致了解的可以访问:TriangleCount on github 一.实验要求 1.1 实验背景 图的三角形计数问题是一个基本的图计算问题,是很多复杂 ...
- Luogu P2807 三角形计数
题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入输出格式 输入 ...
- 洛谷 P2807 三角形计数
P2807 三角形计数 题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问 ...
- Java排序之计数排序
Java排序之计数排序 计数排序思路 计数排序适用于有明确范围的数组,比如给定一个数组,且知道所有值得范围是[m,n].这个时候可以使用一个n-m+1长度的数组,待排序的数组就可以散在这个数组上,数组 ...
- nvGRAPH三角形计数和遍历示例
nvGRAPH三角形计数和遍历示例 #include " stdlib.h" #include" inttypes.h" #include" stdi ...
- Java:多线程计数
Java:多线程计数 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. CountDownLatch 概念 让一些线程阻塞直到另一些线程完成一系列操作才被唤醒 ...
- Java 写三角形 空心三角形 菱形 空心菱形
闲来无事,练习了一下Java基础中的循环语句.练习循环语句,当然少不了,用*打印出来三角形.空心三角形.菱形等这样的几何图形. 粗心大意,失误两次: 一.三角形 遇到一些小问题: 二.金字塔 由于三角 ...
- 算法-java代码实现计数排序
计数排序 第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3], ...
- Java将科学计数法数据转为字符串
如果Excel单元格数据类型为数值,数字太长会变成科学计数法,Java读取的时候使用如下方法可将其转为字符串 BigDecimal bd = new BigDecimal("3.000085 ...
随机推荐
- 积跬步,聚小流------ps有用小技巧,改变png图标颜色
* 实现效果: 原图: 改动后: * 实现目的: 满足为实现不同界面色彩搭配改动png图标的颜色 * 实现方法: 1.打开Photoshop工具,导入须要进行改动的png图标: 2.对导入的图 ...
- 解决运行scrapy是报错No module named cryptography,解决cryptography的安装问题,解决libffi的安装问题
在linux下配置完运行是出现ImportError: No module named cryptography.hazmat.bindings.openssl.binding的错误.原因是crapt ...
- codeforces 394E Lightbulb for Minister 简单几何
题目链接:点我点我 题意:给定n个点. 以下n行给出这n个点坐标. 给定m个点,以下m行给出这m个点坐标. 这m个点是一个凸包,顺时针给出的. 问:在凸包上随意找一个点(x, y) 使得这个点距离n个 ...
- Linux 文本编辑
文本编辑: 查看文本内容: cat:将文件连接并显示 -n:显示时将文件每一行编号 tac:类似于cat,但其功能是逆序显示每一行文件 linlin@ubuntu ...
- Java经常使用日期操作具体解释
Date类型大多数时间分量计算方法已经被Calendar代替 Date经常用法setTime getTime() new Date();默认获取当前的时间 SimpleDateFormat用来格式化和 ...
- 【iOS系列】-autorelease的作用
内存管理原则(配对原则):只要出现了new,alloc,retain方法,就要配对出现release,autorelease 1:对象存入到自动释放池中,当这个池子被销毁的时候他会对池子中所有的对 ...
- 剑指Offer面试题11(Java版):数值的整数次方
题目:实现函数double Power(double base,int exponent),求base的exponent次方.不得使用库函数,同一时候不须要考虑大数问题 1.自以为非常easy的解法: ...
- RFC函数设置外部断点
- YTU 2901: G-险恶逃生II
2901: G-险恶逃生II 时间限制: 1 Sec 内存限制: 128 MB 提交: 44 解决: 14 题目描述 SOS!!!koha is trapped in the danger ...
- web项目开发 之 前端规范 --- HTML编码规范
此文严格按照W3C规范和部分实际项目可读性,浏览器加载,性能等众多属性权衡,做出平时前端编码规范文 档.供广大web工作者参考并实施,对维护和项目扩展升级都能省时省力. 转载请注明出处,JS前端实用开 ...