随机输入一个数,这个数将插入数组,使得数组依然是升序或者降序

Java中随机输入一个数,这个数将插入数组,使得数组依然是升序或者降序

代码和详解

public class HomeWorkFour
{
   
    public static void main(String[] args) 
    {
   
        /*
            已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序
            比如:[10,12,45,90],添加 23 后,该数组为[10,12,23,45,90]
        
            思路分析
            
            本质 数组扩容 + 定位
        
            1. 我们先确定 添加数应该插入到那个索引
            2. 然后扩容
        */

        // 先定义原数组
        byte[] arr = {
    10, 12, 45, 90 };
        byte insernum = 23;
        byte index = -1; // index就是要插入到位置
        
        /*
            定位

            遍历 arr 数组,如果发现 insernum <= arr[i],说明 i 就是要插入的位置
            使用 index 保留 index = -i;
            如果遍历完后,没有发现 insernum <= arr[i],说明 index = arr.length
            即:添加到 arr 到最后
        */

        for(byte i=0;i<arr.length;i++)
        {
   
            if(insernum<arr[i])
            {
   
                index = i;
                break;  // 找到就退出,因为数组为升序排列
            }
        }
        
        // 判断 index 到值,以确定输入到数的位置
        if(index==-1)  // 说明还没有找到位置,则insernum大于整个数组元素,位置在最后一个
        {
   
            index = (byte) arr.length;
        }
        
        // 扩容
        // 创建一个新的数组,大小 arr.length + 1
        byte[] arrnew = new byte[arr.length + 1];
        /*
            下面将 arr 的元素拷贝到 arrnew,并且要跳过 index 位置
            分析
            byte[] arr = { 10, 12, 45, 90 };
            arrnew = {[10],[12],[ ],[45],[90]};
        */

        // i 用来控制 arrnew的下标,j 用来控制 arr的下标
        for(byte i=0,j=0;i<arrnew.length;i++)
        {
   
            if (i != index) // 说明可以把 arr 的元素拷贝到 arrnew
            {
   
                arrnew[i] = arr[j];
                j++;
            } 
            else // i 这个位置就是要插入的数
            {
   
                arrnew[i] = insernum;
            }
        }
        
        // 让 arr 指向 arrnew,原来的数组,就成为垃圾,被销毁
        arr = arrnew;

        System.out.println("=====插入后,arr数组的情况=====");
        for (byte i = 0; i < arr.length;i++
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值