码迷,mamicode.com
首页 > 编程语言 > 详细

Java实现三角形计数

时间:2017-06-24 16:27:29      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:一个   堆栈溢出   dmi   style   system   整数   image   数据   lint   

题:

  技术分享

解:

  这道题考的是穷举的算法。

  一开始看到这道题的时候,本能的想到用递归实现。但使用递归的话数据少没问题,数据多了之后会抛栈溢出的异常。我查了一下,原因是使用递归创建了太多的变量,

  每个变量创建的时候都会有一个“栈帧”,而Java虚拟机对栈帧有限制,不能超出一个范围。

  并且递归和循环相比,递归的效率明显比循环低下,如果想要写一个算法的话,尽量不要使用递归,一方面是因为递归会创建很多变量,占用内存,另一方面是递归极容

  易无限递归。

  ---------------

  最后使用循环嵌套的方式完成了。

代码:

  

 1 package com.lintcode;
 2 
 3 /**
 4  * 三角形计数
 5  * 给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,
 6  * 问,可以寻找到多少组这样的三个数来组成三角形?
 7  * @author Administrator
 8  */
 9 public class Test_003 {
10 //    这道题不能用递归,数据少的话还可以,但是多了就会堆栈溢出。
11 //    这道题就是考“穷举”,列出所有的可能性,再判断。三角形三个边需要三个数字,就循环嵌套三层。
12 //    然后找出三个数字中最大的和最小的和中间数,判断是否构成三角形。
13     /**
14      * @param args
15      */
16     public static void main(String[] args) {
17         int[] S = new int[200];
18         for (int i = 0; i < 200; i++) {
19             S[i] = i+1;
20         }
21         int count = triangleCount(S);
22         System.out.println(count);
23     }
24     
25     public static int triangleCount(int S[]) {
26         int count = 0;
27         for(int i=0; i<S.length-2; i++){//第一条边
28             for (int j = i+1; j < S.length-1; j++) {//第二条边
29                 for (int k = j+1; k < S.length; k++) {//第三条边
30                     int min = getMin(S[i],S[j],S[k]);
31                     int max = getMax(S[i],S[j],S[k]);
32                     int middle = S[i]+S[j]+S[k]-min-max;
33                     if ((min+middle)>max || (min==max)) {
34                         count++;
35                     }
36                 }
37             }
38         }
39         return count;
40     }
41     //求最小值
42     private static int getMin(int a, int b, int c) {
43         int min = a;
44         if (min>b) {
45             min=b;
46         }
47         if (min>c) {
48             min=c;
49         }
50         return min;
51     }
52     //求最大值
53     private static int getMax(int a, int b, int c) {
54         int max = a;
55         if (max<b) {
56             max=b;
57         }
58         if (max<c) {
59             max=c;
60         }
61         return max;
62     }
63 }

 

Java实现三角形计数

标签:一个   堆栈溢出   dmi   style   system   整数   image   数据   lint   

原文地址:http://www.cnblogs.com/gaofei-1/p/7073422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!