Java高手来

1. 请实现一个函数:凑14;输入很多个整数(1<=数值<=13),任意两个数相加等于14就可以从数组中删除这两个数,求剩余数(按由小到大排列);

比如: 输入数组[9,1,9,7,5,13], 输出数组[7,9]

2. 请实现一个函数:线段重叠; 输入多个一维线段,求出这些线段相交的所有区域(也用线段表示); 一条线段用两个值表示(x0,x1), 其中x1>x0;

比如: 输入线段数组[(2,4),(1.5,6),(0.5,3.5),(5,7),(7.5,9)], 输出线段数组[(1.5,4),(5,6)]

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class DummyTest {

static int[] pairSum(int[] array, int sum) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i : array) list.add(i);

for (int i = 0, n, index; i < list.size(); ) {
n = list.get(i);
index = list.subList(i + 1, list.size()).indexOf(sum - n);
if (index >= 0) {
list.remove(index + i + 1);
list.remove(i);
} else {
++i;
}
}

Collections.sort(list);
array = new int[list.size()];
for (int i = 0; i < array.length; ++i)
array[i] = list.get(i);

return array;
}

public static void main(String[] args) {
int[] array = { 9, 1, 9, 7, 5, 13, };
array = pairSum(array, 14);
System.out.println(Arrays.toString(array));
}

}

第二题题目不清。以你的例子,这个5个线段的交集应为空。但实际上你是把这两个线段交集出(1.5,4),另外两个线段交集出(5,6),于是凭什么这两个线段一组,其他线段一组,没有清晰的说明追问

哥们,你太厉害了!第二题我也没太看懂,但是题目就是这么问的,我给粘贴过来了。如果你有思路,帮忙做一下吧!多谢,在线等!只有20多分了,都给你!谢了!

追答

正如我之前所说,这不是没有思路的问题,这是题目意思不清楚的问题。
请问这道题目,我随便写一个算法,你能判断我写的对吗?不能, 因为你不能给出正确答案的解读方式。既然如此,就别管它了

追问

哥们,这道题我问过了,题目没有错,可能是你理解错了。你再好好分析一下,不能不做啊,你很棒!这是我们老师留的作业题,明天下午交的!如果你认为错误的话,你可以按着你的思路来做!

追答

我认为错误的意思就是这道题目根本没有做的意义
比如:已知1+1=3,求1+2的值,这就是无意义的题目,因为题意不符合普通运算规则,却又不给出新的运算规则。你偏要人家按照某个思路来做,更无意义。

如果 你认为这题目没问题,或者有人认为没有错,那请他给出解释,或者由你转述。
如果这是我的作业,我就直接写上此题题意不清,做不了。

追问

网上找的思路:
1. 将输入线段按起点排序,两两计算交集(n-1)
2. 将输入线段按终点排序,两两计算交集(n-1)
3. 将上述2(n-1)条线段(按低点或高点)排序,计算并集(2n-2)
总复杂度 = 3次排序的复杂度 + 4(n-1)

也可以在求完部分交集之后就立即求一次并集,这样能够减少第三步中排序的n值,但会增加总的求并集的复杂度

追答

思路不重要啊,题意是前提。请问你现在能给出题意的理解了吗?还是说这个思路就是题意本身?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-23
第一个可以这么写,测试了下 目前应该没问题!是不是正确答案我也不知道 我自己试的!也许有更好的 别喷啊!
public int[] getArray(int [] a){
int [] b = null;
for(int i = 0 ; i<a.length;i++){
for(int j = i+1 ; j<a.length;j++){
if(a[i]+a[j]==14){
b=new int[a.length-2];
for(int o = 0,y=0;y<b.length;o++){
if(o!=i&&o!=j){
b[y]=a[o];
y++;
}
}
return getArray(b);

}
}
}
return a;
}

第二个在研究中 还有楼主我也姓滕哦。。。我叫滕康飞!追问

哈哈,兄弟,你的算法好像不太对啊,你再看看,而且剩余数不能排序!你再好好研究研究,我在线等!对了,把分都加给你,加油!

追答

额。。。貌似是不能排序 我忘了。。。。排序不难吧 就是加个冒泡排序呗! 但是算法应该是对的啊! 哪不对?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网