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 ...
 
随机推荐
- 【Mongodb教程 第一课补加课2 】MongoDB下,启动服务时,出现“服务没有响应控制功能”解决方法
			
如图,如果通过下列代码,添加服务后,使用net start命令出现这样的问题时,可以参考下我的解决方法. D:\MongoDB>mongod --dbpath D:\MongoDB\Data - ...
 - Android第一个个人APP(帐号助手)
			
第一个app上线了,关于帐号保存的一个app.本地保存,无须联网. 下载地址为:http://android.myapp.com/myapp/detail.htm?apkName=com.weeky. ...
 - 我的gulp.js清单
			
var gulp = require('gulp'), cssmin = require('gulp-clean-css'), //压缩css文件 concat = require('gulp-con ...
 - autofac如何注册静态方法里的接口对象
			
标题可能是不准确的,因为我不知道如何描述.不知道的原因,是对依赖注入一知半解. Autofac可以自动注册对象实例到接口,人所尽知.而在asp.net mvc中,这个实例化的工作,通常在每个控制器的构 ...
 - MUI日期选择控件
			
MUI的Demo里面有例子,实际做的时候发现日期老是乱码,调了半天,最后发现引用的CSS错误,例子中引用的是 <link href="Css/mui.picker.min.css&qu ...
 - Linq:int类型使用Contains方法
			
获取的是前台传过来的String类型的值,例如:1,123,44,59 具体代码如下 if (!string.IsNullOrEmpty(str)) { string[] strArr = str.S ...
 - 借助ltp  逐步程序化实现规则库  文本生成引擎基于规则库和业务词库  去生成文本
			
[哪个地方做什么的哪家靠谱?地名词库行业.业务词库]苏州做网络推广的公司哪家靠谱?苏州镭射机维修哪家最专业?昆山做账的公司哪家比较好广州称重灌装机生产厂家哪家口碑比较好 [含有专家知识]郑州律师哪个好 ...
 - bzoj1486【HNOI2009】最小圈
			
1486: [HNOI2009]最小圈 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1778 Solved: 827 [Submit][Statu ...
 - GitHub Pages使用入门
			
1.什么是GitHub Pages GitHub Pages可以当做项目的Websites,GitHub Pages有两种最基本的用法: 作为你自己(或者组织)的网站(访问地址示例:http://us ...
 - __setup 在内核中的作用【转】
			
本文转载自:http://blog.csdn.net/lanmanck/article/details/7613305 本文来自: http://blog.chinaunix.net/uid-1379 ...