已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序,比如: [10, 12, 45, 90],添加23后,数组为[10, 12, 23, 45, 90]

 1 public class shuzu18{
 2     //编写一个main方法
 3     public static void main(String[] args){
 4 
 5         /*
 6         已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序,比如:
 7         [10, 12, 45, 90],添加23后,数组为[10, 12, 23, 45, 90]
 8 
 9 
10         思路 本质是 数组的扩容 + 定位
11         1. 我们先确定 添加数应该插入到哪个索引
12         2. 然后扩容
13         */
14 
15         //先定义原数组
16         int[] arr = {10, 12, 45, 90};
17         int insertNum = 23;
18         int index = -1;//index就是要插入的位置
19 
20         //遍历 arr数组,如果发现 insertNum <= arr[i],说明 i 就是要插入的位置
21         //使用 index 保留 index = i;
22         //如果遍历完后,没有发现 insertNum <= arr[i],说明 index = arr.length
23         //即:添加到arr的最后
24 
25         for(int i = 0;i < arr.length;i++){
26             if(insertNum <= arr[i]){
27                 index = i;
28                 break;//找到位置后,就退出
29             }
30         }
31 
32         //判断index 的值
33         if(index == -1){//说明没有还没有找到位置
34             index = arr.length;
35 
36         }
37 
38         //扩容
39         //先创建一个新的数组,大小 arr.length + 1
40         int[] arrNew = new int[arr.length + 1];
41         //下面准备将arr的元素拷贝到arrNew ,并且要跳过 index 位置
42         /*
43         分析:
44         int[] arr = {10. 12, 45, 90};
45         arrNew = {                  }
46         */
47 
48         for(int i = 0,j = 0;i < arrNew.length;i++){//i 就是新数组的下标, j就是原数组的下标
49             if(i != index){//说明可以把 arr的元素拷贝到 arrNew
50                 arrNew[i] = arr[j];
51                 j++;
52             }else{//i这个位置就是要插入的数
53                 arrNew[i] = insertNum;
54             }
55         }
56 
57         //让 arr 指向 arrNew ,原来的数组,就成为垃圾,被摧毁
58         arr = arrNew;
59 
60         System.out.println("===插入后,arr数组的元素情况===");
61         for(int i = 0;i < arr.length; i++){
62             System.out.print(arr[i] + "\t");
63         }
64     }
65 }

 

posted @ 2024-08-02 10:31  勤奋的小番茄  阅读(3)  评论(0编辑  收藏  举报