我需要一些帮助将数字8插入到一个给我随机值的数组中。数组必须按顺序排列。例如,如果我有一个数组(1,5,10,15),我必须在5和10之间插入数字8。我有一个问题,我怎么能找到一个方法来找到8将放置因为数组是随机的,它可以是任何东西。到目前为止,这是我的代码:
public class TrickyInsert {
public static void main(String[] args) {
int[] mysteryArr = generateRandArr();
//print out starting state of mysteryArr:
System.out.print("start:\t");
for ( int a : mysteryArr ) {
System.out.print( a + ", ");
}
System.out.println();
//code starts below
// insert value '8' in the appropriate place in mysteryArr[]
int[] tmp = new int[mysteryArr.length + 1];
int b = mysteryArr.length;
for(int i = 0; i < mysteryArr.length; i++) {
tmp[i] = mysteryArr[i];
}
tmp[b] = 8;
for(int i =b ; i<mysteryArr.length; i++) {
tmp[i+1] = mysteryArr[i];
}
mysteryArr = tmp;
任何提示?谢谢!
答案 0 :(得分:5)
只需添加号码,然后使用Arrays.sort
方法,
int b = mysteryArr.length;
int[] tmp = new int[b + 1];
for(int i = 0; i < b; i++) {
tmp[i] = mysteryArr[i];
}
tmp[b] = 8;
mysteryArr = Arrays.sort(tmp);
答案 1 :(得分:1)
在您的示例中,随机数组已排序。如果是这种情况,只需插入8并再次排序。
答案 2 :(得分:1)
只需复制数组,添加8,然后再次排序。
int[] a = generateRandArr();
int[] b = Arrays.copyOf(a, a.length + 1);
b[a.length] = 8;
Arrays.sort(b);
答案 3 :(得分:0)
我建议使用二进制搜索来找到合适的索引。找到索引后,您可以使用
System.arraycopy(Object src, int srcIndex, Obj dest, int destIndex, int length)
将左半部分复制到新数组(长度比现有数组长一个),然后是新元素,最后是右半部分。这将停止每次插入元素时对整个数组进行排序的需要。
此外,以下部分不做任何事情。
for(int i =b ; i<mysteryArr.length; i++) {
tmp[i+1] = mysteryArr[i];
}
自int b = mysteryArr.length;
以来,在设置int i =b ;
后,i<mysteryArr.length;
将为false,因此此for循环中的行将永远不会执行。
答案 4 :(得分:0)
int findPosition(int a, int[] inputArr)
{
for(int i = 0; i < inputArr.length; ++i)
if(inputArr[i] < a)
return i;
return -1;
}
int[] tmpArr = new int[mysteryArr.length + 1];
int a = 8; // or any other number
int x = findPosition(a, mysteryArr);
if(x == -1)
int i = 0;
for(; i < mysteryArr.length; ++i)
tmpArr[i] = mysteryArr[i];
tmpArr[i] = a;
else
for(int i = 0; i < mysteryArr.length + 1; ++i)
if(i < x)
tmpArr[i] = mysteryArr[i];
else if(i == x)
tmpArr = a;
else
tmpArr[i] = mysteryArr[i - 1];