黑马程序员技术交流社区
标题:
哪位大神能给出三种不同思路解这道题吗
[打印本页]
作者:
YYH7
时间:
2016-5-2 01:09
标题:
哪位大神能给出三种不同思路解这道题吗
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
作者:
pal_xie
时间:
2016-5-2 21:48
想了两种方法,不知道满不满足楼主想法
//方法1,使用TreeSet重写compare方法添,就能自动把添加的数字插入到对应位置
private static int[] fun1(int[] arr, int num) {
int[] newArr = new int[arr.length + 1];
//创建TreeSet对象传入比较器
TreeSet<Integer> ts = new TreeSet<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
int i = i1 - i2;
return i == 0 ? 1 : i;
}
});
//将原来数字添加的TreeSet对象中
for (Integer i : arr) {
ts.add(i);
}
//添加新元素到TreeSet对象中
ts.add(num);
//将TreeSet元素添加到新的数组中
int count = 0;
for (Integer i : ts) {
newArr[count++] = i;
}
return newArr;
}
//方法2:使用Arrays的二分查找法找出插入点位置,再来进行复制添加操作
private static int[] fun2(int[] arr, int num) {
int[] newArr = new int[arr.length + 1];
//使用二分查找法查找插入点,如果匹配到数组元素,返回该元素位置i,无法匹配是返回 -插入点-1;
int i = Arrays.binarySearch(arr, num);
//分两种情况,匹配到元素和未匹配到元素;
//简介:使用数组复制System的数组复制方法arraycopy,先复制插入点左边,在添加插入点元素,再复制插入点右边
//public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
//src:源数组; srcPos:源数组要复制的起始位置; dest:目的数组; destPos:目的数组放置的起始位置; length:复制的长度。
if (i >= 0) {
System.arraycopy(arr, 0, newArr, 0, i);
newArr[i] = num;
System.arraycopy(arr, i, newArr, i + 1, arr.length - i);
} else {
System.arraycopy(arr, 0, newArr, 0, -i - 1);
newArr[-i - 1] = num;
System.arraycopy(arr, -i - 1, newArr, -i, arr.length + i + 1);
}
return newArr;
}
复制代码
作者:
fanlelong
时间:
2016-5-2 22:52
冒失数组是固定长度 你说的是集合吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2