已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序,比如: [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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!