题目:给定一个有序的数组{13, 15, 19, 28, 33, 45, 78, 106},如果往该数组中存储一个元素,并保证这个数组还是有序的,那么这个元素的存储的角标如何获取?并打印出插入后的数组 packagecom.ljy.interviewQuestion;

/** * 题目:给定一个有序的数组{13, 15, 19, 28, 33, 45, 78, 106},

* 如果往该数组中存储一个元素50,并保证这个数组还是有序的,

* 那么这个元素的存储的角标如何获取?

* 思路:利用二分查找法,将最后返回min值即可。

* 步骤: 1)定义arr,key来存储题目中的值,定义max,min和mid来分别记录二分区间

* 2)使用while循环结构来控制,循环条件为 min <= max,否则返回min * @author liaojianya * 2016-11-16

*/

public class InsertOrderedArr {

public  static  void main(String[] args) {

int[] arr = newint[] {13, 15, 19, 28, 33, 45, 78, 106};

int key = 50;

int index = getInsertIndex(arr, key);

System.out.println(key + "应该插入到数组的位置下标为: " + index);

int[] arr1 = newint[arr.length + 1];

insertArr(arr, arr1, key, index);

printArr(arr1);

}

//打印数组 privatestaticvoid printArr(int[] arr1) {

System.out.print("插入元素后的数组为: [");

for(int i = 0; i < arr1.length; i++) {

if(i != arr1.length - 1) {

System.out.print(arr1[i] + ", ");

} else {

System.out.println(arr1[i] + "]");

}

}

}

public  static  int  getInsertIndex(int[] arr, int key) {

int min = 0; int max = arr.length - 1; while(min <= max) {

//右移折半

int mid = (min + max) >> 1;

//如果key值比中间值大,则所要插入位置在数组的右半边

if(key > arr[mid]) {

min = mid + 1;

}

//如果key值比中间值小,则所要插入位置在数组的左半边

else  if(key < arr[mid]) {

max = mid - 1;

}

//key值和中间值一样大,则直接返回index = mid

else {

return mid;

}

}

//如果下标min > max,则返回min位置即为所要插入的位置 return min; }

/* * 步骤: * 循环遍历arr,如果i < index,则arr1[i] = arr[i];

* 如果i == index,则arr1[i] = key; * 否则,arr1[i] = arr[i-1];

*   */

public  static  void insertArr(int[] arr, int[] arr1, int key, int index) {

for(int i = 0; i < arr1.length; i++) {

if (i < index) {

arr1[i] = arr[i];

} else  if(i == index) {

arr1[i] = key;

} else {

arr1[i] = arr[i-1];

}

}

}

}

程序输出:

java 往数组增加一个元素相关推荐

  1. java替换数组中的元素_如何使用Java 8流快速替换列表中的元素

    java替换数组中的元素 假设您有一个项目清单: List<String> books = Arrays.asList("The Holy Cow: The Bovine Tes ...

  2. android给数组添加新元素_「数组赋值」什么是数组、如何创建数组、数组赋值、数组增加一个新元素 - seo实验室...

    数组赋值 一起组团(什么是数组) 我们知道变量用来存储数据,一个变量只能存储一个内容.假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据,那就会 ...

  3. JAVA删除数组中指定元素

    //记得在开头引用Arrays类 import java.util.Arrays; //返回剔除指定元素的数组 public int[] getThree(int[] scores){//剔除不符要求 ...

  4. html获取数组的前三个元素,web前端:js 获取数组最后一个元素

    Javascript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在html(标 ...

  5. java删除数组中重复元素的方法

    java删除数组中重复元素的方法 方法一:for双循环 方法二:利用HashMap,储存元素 方法一:for双循环 1.声明int类型index,该数即可为不重复元素下标,还可统计数组中不重复元素的个 ...

  6. java删除数组中重复元素的几种方法

    Java操控数组,删除数组中所有的重复元素,使其数组元素全部唯一,有以下几种方法: 1,使用set(最好想到),set本身就是不重复的集合: package Array_test;import jav ...

  7. java删除数组中重复元素

    id="BAIDU_DUP_fp_iframe" src="https://pos.baidu.com/wh/o.htm?ltr="> > src= ...

  8. 什么是数组、如何创建数组、数组赋值、数组增加一个新元素

    一起组团(什么是数组) 我们知道变量用来存储数据,一个变量只能存储一个内容.假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据,那就会变的更麻烦 ...

  9. java从数组中删除元素(数组的缩容)

    java从数组中删除元素(数组的缩容) 1,解决方案一 /* * 数组的缩容(删除元素) * 第一种解决方案 * 移动元素,被删除元素后面的元素往前移一位 * 优点:不需要创建新数组,省内存,速度快 ...

最新文章

  1. 【Java】阶乘 素数 循环
  2. 神经尘埃、脑波打字…… 2018年的脑科学要研究什么?
  3. 利用TensorFlow2.0为胆固醇、血脂、血压数据构建时序深度学习模型(python完整源代码)
  4. 9.LDA(线性判别分析)
  5. 关于iOS沙盒的目录结构和获取
  6. bootstrap源码之滚动监听组件scrollspy.js详解
  7. Python学习笔记:爬取网页图片
  8. Exchange server 2007中启用pop3和IMAP4协议访问
  9. P3399 丝绸之路(线性二维dp)
  10. 敏捷开发免费管理工具——火星人预览之七:自定义字段
  11. java通信方式_java 认知底层的五种通信方式
  12. [转载] Python time sleep()方法如何使用?
  13. js可以控制文件上传的速度吗?
  14. 二叉树 先序遍历 中序遍历 后续遍历 java实现
  15. 应用回归分析第五版电子书_应用回归分析 R语言版_何晓群著_2017年
  16. 为什么除法,开方,求对数比乘法,乘方,求指数更难
  17. Creator 3.0中摄像机调整技巧: 1.旋转:Cmd+右键 移动:空格+右键 放缩:滚轮
  18. Python使用for实现无限循环的多种方法
  19. Windows软件清单
  20. R以及RStudio的获取和使用

热门文章

  1. 存储卡的相关标准.CF.SD.SDHC.MMC.TF
  2. 什么软件可以测试家里的宽带,技术贴 | 如何简单又专业的测试自己家的网速是否达标...
  3. PS技巧一-----镜头光晕
  4. 【单片机仿真项目】LED 闪烁灯(proteus原理图+keil代码)
  5. 互联网人群画像和你所不知道的真相
  6. SCI、EI和IEEE有什么区别
  7. Linux iio驱动学习
  8. [艾兰岛]制作传送门之boss技能——kura酱长期更新
  9. burpsuit无法成功代理之导入证书
  10. allergro音乐术语什么意思_常见音乐术语(速度术语)