假设有两个整型集合
A集合 元素
8 20 21 35 49 55
B集合 元素
4 19 23 37 40
每个集合中的元素都是从小到大排列
现在有一个数字,如5-35
要求删除A和B中出现在5-35中间的元素,包括5和35,之后A和B中大于35的每个元素减去31,
我想了个算法,感觉很繁琐,效率太低
A集合 元素
8 20 21 35 49 55
B集合 元素
4 19 23 37 40
每个集合中的元素都是从小到大排列
现在有一个数字,如5-35
要求删除A和B中出现在5-35中间的元素,包括5和35,之后A和B中大于35的每个元素减去31,
我想了个算法,感觉很繁琐,效率太低
解决方案 »
- 你可以试试把socket的inputstream导入到Scanner,用Scanner的nextLine()
- 面向对象和面向过程的比较
- jsp和servlet的区别?
- 做了论坛上迅雷笔试关于线程的题目,发现自己程序的问题,大家来讨论讨论
- 关于super的疑惑
- 求一个JToolbar的例子
- JAVA新手请教这一点点代码为什么错?
- Jcreator Pro的一个小问题
- 大家数据库图表是用什么做的
- 最复杂的循环啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!
- 网络画板,传送一个“储存点的点向量”遇到问题
- java 中数据库连接出现的错误 求大师指导
一个for循环 遍历 a 里面一个 if 进行数字加减 和过滤,合格就仍c里面 就完事了。
是一串数字,比如5-35
下面是我的算法,感觉循环很多次,不知道有没好的算法 //A集合 8 20 21 35 49 55
List<Integer> a=new ArrayList<Integer>();
Collections.addAll(a, 8,20,21,35,49,55);
//B集合 4 19 23 37 40
List<Integer> b=new ArrayList<Integer>();
Collections.addAll(b, 19,23,37,40);
//假设数据范围为5-35
for(int i=5;i<=35;i++){
boolean isFinish=false;
for(int ai=0,al=a.size();ai<al;ai++){
if(a.get(ai)==i){
a.remove(ai);
ai--;
al--;
isFinish=true;
break;
}
}
if(!isFinish){
for(int bi=0,bl=b.size();bi<bl;bi++){
if(b.get(bi)==i){
b.remove(bi);
bi--;
bl--;
break;
}
}
}
}
//将A B中大于35的元素减去31
for(int i=0,j=a.size();i<j;i++){
int num=a.get(i);
if(num>35){
a.remove(i);
a.add(num-(36-5));
i--;
j--;
}
}
for(int i=0,j=b.size();i<j;i++){
int num=b.get(i);
if(num>35){
b.remove(i);
b.add(num-(36-5));
i--;
j--;
}
}
//输出A B
for(int o : a){
System.out.println("a:"+o);
}
for(int o : b){
System.out.println("b:"+o);
}
如果你想要的结果是删除list中5到35之间的数,你为什么不对list进行遍历,然后进行选取,这样复杂度是o1。
for(Object o:a){
if(Integer.parstInt("o")>=5&&Integer.parstInt("o")>=5)
remove o;
else{
o=Integer.parstInt("o")-31;
}
}
//没有编译环境,有可能代码会有问题。
将A集合并上B集合去与(A、B集合的元素不会有交集)5-35之前所有的数字求交集,然后取得A、B集合交集以外的所有数据
//A集合 8 20 21 35 49 55
List<Integer> a=new ArrayList<Integer>();
Collections.addAll(a, 8,20,21,35,49,55);
//B集合 4 19 23 37 40
List<Integer> b=new ArrayList<Integer>();
Collections.addAll(b, 19,23,37,40);
List<Integer> adelete = new ArrayList<Integer> ();
List<Integer> bdelete = new ArrayList<Integer> ();
//假设数据范围为5-35
for (int atmp : a) {
if (atmp >= 5 && atmp <= 35) {
adelete.add(atmp);
}
}
for (int btmp : b) {
if (btmp >= 5 && btmp <= 35) {
bdelete.add(btmp);
}
}
a.removeAll(adelete);
b.removeAll(bdelete);
//将A B中大于35的元素减去31
for(int i=0,j=a.size();i<j;i++){
int num=a.get(i);
if(num>35){
a.remove(i);
a.add(num-(36-5));
i--;
j--;
}
}
for(int i=0,j=b.size();i<j;i++){
int num=b.get(i);
if(num>35){
b.remove(i);
b.add(num-(36-5));
i--;
j--;
}
}
//输出A B
for(int o : a){
System.out.println("a:"+o);
}
for(int o : b){
System.out.println("b:"+o);
}
每个集合遍历一次即可。
以A集合为例:
只保留小于5或者大于35的元素,如果元素大于35则减去31.List<Integer> result = new List<Integer>();
for (int n : a) {
if(n < 5) result.add(n);
else if(n > 35) result.add(n - 31);
}
a = result;集合B同理
var list = new List[Int](............)
list.remove(i=>i<35&&i>5)
list.map(i=>i-31)
if(Integer.parstInt("o")>=5&&Integer.parstInt("c")>=3)
remove o;
else{
o=Integer.parstInt("o")-21;
print("http://www.fjjianen.com")
}
}