Java集合效率问题
凑算式
B DEF
A + --- + ------- = 10
C GHI(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
显然可以用暴力算法,但是需要排除元素的重复问题,刚开始我用的是Java内置的Set集合,运行时间特别长
package lanqiao2016;
import java.util.concurrent.ConcurrentSkipListSet;
public class T3_array {
public static void main(String[] args) {
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
int f = 0;
int g = 0;
int h = 0;
int i = 0;
int count = 0;
ConcurrentSkipListSet<Integer> intSet = new ConcurrentSkipListSet<Integer>();
for(a=1; a<=9; a++)
{
if(a > 10)
continue;
for(b=1; b<=9; b++)
{
for(c=1; c<=9; c++)
{
if(a + b/c > 10)
continue;
for(d=1; d<=9; d++)
{
for(e=1; e<=9; e++)
{
for(f=1; f<=9; f++)
{
for(g=1; g<=9; g++)
{
for(h=1; h<=9; h++)
{
for(i=1; i<=9; i++)
{
intSet.clear();
intSet.add(a);
intSet.add(b);
intSet.add(c);
intSet.add(d);
intSet.add(e);
intSet.add(f);
intSet.add(g);
intSet.add(h);
intSet.add(i);
if(a + (double)b/c + (double)(d*100+e*10+f)/(double)(g*100+h*10+i) == 10
&& intSet.size() == 9)
{
count++;
}
}
}
}
}
}
}
}
}
}
System.out.println(count);
}
}
后来改成直接的逻辑判断,几乎瞬间得出结果
package lanqiao2016;
public class T3 {
public static void main(String[] args) {
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
int f = 0;
int g = 0;
int h = 0;
int i = 0;
int count = 0;
for(a=1; a<=9; a++)
{
if(a > 10)
continue;
for(b=1; b<=9; b++)
{
for(c=1; c<=9; c++)
{
if(a + b/c > 10)
continue;
for(d=1; d<=9; d++)
{
for(e=1; e<=9; e++)
{
for(f=1; f<=9; f++)
{
for(g=1; g<=9; g++)
{
for(h=1; h<=9; h++)
{
for(i=1; i<=9; i++)
{
if(
a==b || a==c || a==d || a==e || a==f || a==g || a==h || a==i ||
b==c || b==d || b==e || b==f || b==g || b==h || b==i ||
c==d || c==e || c==f || c==g || c==h || c==i ||
d==e || d==f || d==g || d==h || d==i ||
e==f || e==g || e==h || e==i ||
f==g || f==h || f==i ||
g==h || g==i ||
h==i
)
continue;
if(a + (double)b/c + (double)(d*100+e*10+f)/(double)(g*100+h*10+i) == 10)
{
count++;
}
}
}
}
}
}
}
}
}
}
System.out.println(count);
}
}
Java集合效率问题的更多相关文章
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- Java集合框架实现自定义排序
Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优 ...
- Java集合---Array类源码解析
Java集合---Array类源码解析 ---转自:牛奶.不加糖 一.Arrays.sort()数组排序 Java Arrays中提供了对所有类型的排序.其中主要分为Prim ...
- Java 集合常用方法锦集
Java集合非常的重要,尤其在业务中,如果你在熟练的使用Java数据结果的集合工作,将会大大的提高工作效率,减少代码量. 1.集合的互换 1.1 Map转Set Map<Integer, Str ...
- 《java集合概述》
JAVA集合概述: Collection: |---List有序的:通过索引就可以精确的操作集合中的元素.元素是可以重复的. List提供了增删改查的动作. 增加add(element) add(in ...
- java 集合:实现
集合本来就是为了方便开发的,实现了一些基本数据结构,一般来说数据结构有两种物理的实现:数组和链表.数组是连续的空间,链表是不连续的.基于这两种又扩展了很多的数据结构.队列,栈,hash表,树. 在ja ...
- Java提高篇(三五)-----Java集合细节(一):请为集合指定初始容量
集合是我们在Java编程中使用非常广泛的,它就像大海,海纳百川,像万能容器,盛装万物,而且这个大海,万能容器还可以无限变大(如果条件允许).当这个海.容器的量变得非常大的时候,它的初始容量就会显得很重 ...
- Java集合源码分析(三)LinkedList
LinkedList简介 LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈.队列和双端队列来使用. LinkedList同样是非线程安全 ...
随机推荐
- lisp学习总结(一)
lisp太简单 lisp核心太简单了只有几个简单的逻辑定理,简单到你会认为他啥事都做不了. lisp语法太简单了,只有符号,参数,以及括号,组成一种万能的表达式. 由于上述lisp的简单,所以对于初学 ...
- Java容器解析系列(13) WeakHashMap详解
关于WeakHashMap其实没有太多可说的,其与HashMap大致相同,区别就在于: 对每个key的引用方式为弱引用; 关于java4种引用方式,参考java Reference 网上很多说 弱引用 ...
- wirkshark过滤规则
https://blog.csdn.net/wojiaopanpan/article/details/69944970
- Redis 中的数据持久化策略(AOF)
上一篇文章,我们讲的是 Redis 的一种基于内存快照的持久化存储策略 RDB,本质上他就是让 redis fork 出一个子进程遍历我们所有数据库中的字典,进行磁盘文件的写入. 但其实这种方式是有缺 ...
- STM8 关闭PWM输出后的电平输出问题解决
STM系列的单片机PWM输出如果被关断比如用TIM1_CtrlPWMOutputs进行停止输出后,电平的高低处于不确定的状态. 他取决于: 1.GPIO初始化的特性 2.关断那一刻时的电平 3.CCM ...
- Iptables和Firewall-selinux
一.Iptables防火墙 ---------- **三表五链:**三表: filter过滤表 nat转换表 mangle表五链: PREROUTING--->在进行路由选择前处理数据包 INP ...
- Leetcode 题目整理-5 Valid Parentheses & Merge Two Sorted Lists
20. Valid Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...
- 编写一个函数,输入n为偶数时,调用方法求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
需求:编写一个函数,输入n为偶数时,调用方法求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n package com.Summer_0511.cn; impo ...
- vs2012 编译 zlib 1.2.8
1. 下载 http://zlib.net/zlib-1.2.8.tar.gz 2. 编译 - 解压到目录,如d:\library - 开启VS2012的Command Pro ...
- selenium 操作下拉处理
操作下拉框处理 在网页中,有时候会遇到下拉框处理,这时候使用Webdriver提供的select类来处理. ##操作下拉框处理 #coding = utf-8 from selenium import ...
