A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

2 个回复

倒序浏览
想了两种方法,不知道满不满足楼主想法
  1. //方法1,使用TreeSet重写compare方法添,就能自动把添加的数字插入到对应位置
  2.         private static int[] fun1(int[] arr, int num) {
  3.                 int[] newArr = new int[arr.length + 1];
  4.                 //创建TreeSet对象传入比较器
  5.                 TreeSet<Integer> ts = new TreeSet<Integer>(new Comparator<Integer>() {

  6.                         @Override
  7.                         public int compare(Integer i1, Integer i2) {
  8.                                 int i = i1 - i2;
  9.                                 return i == 0 ? 1 : i;
  10.                         }
  11.                 });
  12.                 //将原来数字添加的TreeSet对象中
  13.                 for (Integer i : arr) {
  14.                         ts.add(i);
  15.                 }
  16.                 //添加新元素到TreeSet对象中
  17.                 ts.add(num);
  18.                 //将TreeSet元素添加到新的数组中
  19.                 int count = 0;
  20.                 for (Integer i : ts) {
  21.                         newArr[count++] = i;
  22.                 }
  23.                 return newArr;
  24.         }
  25.         //方法2:使用Arrays的二分查找法找出插入点位置,再来进行复制添加操作
  26.         private static int[] fun2(int[] arr, int num) {
  27.                 int[] newArr = new int[arr.length + 1];
  28.                 //使用二分查找法查找插入点,如果匹配到数组元素,返回该元素位置i,无法匹配是返回  -插入点-1;
  29.                 int i = Arrays.binarySearch(arr, num);
  30.                 //分两种情况,匹配到元素和未匹配到元素;
  31.                 //简介:使用数组复制System的数组复制方法arraycopy,先复制插入点左边,在添加插入点元素,再复制插入点右边
  32.                 //public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
  33.                 //src:源数组; srcPos:源数组要复制的起始位置; dest:目的数组; destPos:目的数组放置的起始位置; length:复制的长度。
  34.                 if (i >= 0) {
  35.                         System.arraycopy(arr, 0, newArr, 0, i);
  36.                         newArr[i] = num;
  37.                         System.arraycopy(arr, i, newArr, i + 1, arr.length - i);
  38.                 } else {
  39.                         System.arraycopy(arr, 0, newArr, 0, -i - 1);
  40.                         newArr[-i - 1] = num;
  41.                         System.arraycopy(arr, -i - 1, newArr, -i, arr.length + i + 1);
  42.                 }
  43.                 return newArr;
  44.         }
复制代码
回复 使用道具 举报
冒失数组是固定长度 你说的是集合吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马