【问题标题】:how to insert an element into an order array如何将元素插入订单数组
【发布时间】:2012-07-11 15:05:43
【问题描述】:

假设我有一个按升序排序的整数数组,我想插入一个新数字并且我知道在什么位置插入它。我怎么能使用 System.arraycopy。

System.arraycopy(items, i, items, i + 1, items.length+1);
items[i] = n;

或者我是否必须从插入位置(将位置移动一个元素)创建一个临时数组副本到临时数组,然后复制回原始数组

int[] newItems = new int[size + 1];
System.arraycopy(items, i, newItems, i + 1, items.length+1);
items[i] = s;
size++;
System.arraycopy(items, 0, newItems, i, i);
items = newItems;

【问题讨论】:

    标签: java arrays insertion sorted


    【解决方案1】:

    一些想法/观察

    • 为什么要问您可以轻松测试什么?
    • 第一种方法可能会抛出 IndexOutOfBounds(然后不起作用)
      • 因为在原始数组中没有其他项目的位置
      • 因为复制段的长度最多可以为 items.length - i -1(插入点及其后会有 length-i,必须删除最后一个,否则会出现该异常)。
    • 第二种方法也会失败。您似乎将长度误认为是最后一个位置。

    【讨论】:

      【解决方案2】:

      你的第一种方法会奏效。

      如果您不确定,请参阅 arraycopy arraycopy 上的文档。如果源和目标相同,它会像复制到一个临时数组一样,然后再复制回原始数组,所以你可以确信它会工作!

      【讨论】:

        猜你喜欢
        • 2017-11-06
        • 2021-05-31
        • 1970-01-01
        • 2013-10-24
        • 1970-01-01
        • 1970-01-01
        • 2011-12-24
        • 1970-01-01
        • 2013-01-24
        相关资源
        最近更新 更多