题:

  

解:

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

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

  每个变量创建的时候都会有一个“栈帧”,而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实现三角形计数的更多相关文章

  1. 基于mapreduce实现图的三角形计数

    源代码放在我的github上,想细致了解的可以访问:TriangleCount on github 一.实验要求 1.1 实验背景         图的三角形计数问题是一个基本的图计算问题,是很多复杂 ...

  2. Luogu P2807 三角形计数

    题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入输出格式 输入 ...

  3. 洛谷 P2807 三角形计数

    P2807 三角形计数 题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问 ...

  4. Java排序之计数排序

    Java排序之计数排序 计数排序思路 计数排序适用于有明确范围的数组,比如给定一个数组,且知道所有值得范围是[m,n].这个时候可以使用一个n-m+1长度的数组,待排序的数组就可以散在这个数组上,数组 ...

  5. nvGRAPH三角形计数和遍历示例

    nvGRAPH三角形计数和遍历示例 #include " stdlib.h" #include" inttypes.h" #include" stdi ...

  6. Java:多线程计数

    Java:多线程计数 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. CountDownLatch 概念 让一些线程阻塞直到另一些线程完成一系列操作才被唤醒 ...

  7. Java 写三角形 空心三角形 菱形 空心菱形

    闲来无事,练习了一下Java基础中的循环语句.练习循环语句,当然少不了,用*打印出来三角形.空心三角形.菱形等这样的几何图形. 粗心大意,失误两次: 一.三角形 遇到一些小问题: 二.金字塔 由于三角 ...

  8. 算法-java代码实现计数排序

    计数排序   第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3], ...

  9. Java将科学计数法数据转为字符串

    如果Excel单元格数据类型为数值,数字太长会变成科学计数法,Java读取的时候使用如下方法可将其转为字符串 BigDecimal bd = new BigDecimal("3.000085 ...

随机推荐

  1. Mac Chrome-点击书签页在新的标签打开之方法

    PS:一直使用的是Firefox,但是现在Firefox有些不能满足我现在的需求,所以下载了chrome.可是当使用chrome时发现有一个很实用的功能它不能设置,这个让我很抓狂. 当点击标签时不能新 ...

  2. 在VC6.0中多线程编程演示样例(带同步信号量)

    直接上代码: #include <windows.h>//必要的头文件,使用Windows API函数 #include <stdio.h> int index = 0; in ...

  3. css hack原理

    近期看了几篇关于css hack的文章,认为不错整理一下. css hack非常多人不理解它的原理,事实上大家都知道对于不同的浏览器,CSS的解析程度不一样.因此会导致生成的页面效果不一样:特别是对于 ...

  4. egrep grep -E

    egrep执行效果与"grep-E" Linux egrep命令用于在文件内查找指定的字符串. egrep执行效果与"grep-E"相似,使用的语法及参数可参照 ...

  5. JSON: Circular Dependency Errors

    If you’re using Object Relational Mapping frameworks like Hibernate, and are using the bi-directiona ...

  6. manacher求最长回文子串算法

    原文:http://www.felix021.com/blog/read.php?2040 首先用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插入一个 ...

  7. AutoIT: 学习对GUI Sample上所有的资源进行操作

    $handle= WinGetHandle("Sample GUI") ;,"SRE Example 3 Result", $handle) $ctrl= Co ...

  8. 学习Python到写poc其实没那么难

    现在,开始! 0x00 前言 今天刚刚把http://drops.wooyun.org/tips/12751放到收藏夹准备看的,然后又看到题主的这个问题.顺便观摩了1楼大神的博客,我这种炒鸡新手表示很 ...

  9. 转:Oculus Unity Development Guide开发指南(2015-7-21更新)

    http://forum.exceedu.com/forum/forum.php?mod=viewthread&tid=34175 Oculus Unity Development Guide ...

  10. Eclipse如何打开Android工程(转载)

    转自:http://www.cnblogs.com/kernel-style/p/3339102.html 一.Eclipse如何打开Android工程 1.你可以在file->new-> ...