问题描述
已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序,
//比如:[10,12,45,90],添加23后,数组为[10,12,23,45,90]
解决方案:
//思路 数组扩容 + 定位
//1.我们先确定 添加数应该插入到哪个索引
//2.然后扩容
//先定义原数组
int[] arr = {10,12,45,90};
int insertNum = 23;
int index = -1;//index就是要插入的位置
//遍历 arr数组,如果发现insertNum <= arr[i],说明i就是要插入的位置
//使用 index 保留 index = i;
//如果遍历完后,没有发现 insertNum <= arr[i],说明index = arr.length
//即:添加到arr的最后
for (int i = 0;i < arr.length ;i++ ) {
if (insertNum <= arr[i]) {
index = i;
break;//找到位置后,就退出
}
}
//判断
if (index == -1) {//说明没有找到位置
index = arr.length;
}
//先创建一个新的数组,大小arr.length + 1
int[] arrNew = new int[arr.length + 1];
//将arr的元素拷贝到arrNew,并且要跳过index位置
for (int i = 0,j = 0;i < arrNew.length ;i++ ) {
if (i != index) {//说明可以把arr的元素拷贝到arrNew
arrNew[i] = arr[j];
j++;
} else {//i这个位置就是要插入的数
arrNew[i] = insertNum;
}
}
arr = arrNew;
for (int i = 0;i < arr.length ; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("index=" + index );
运行结果如下: