青铜挑战:爱不起的数组
1.数组的初始化
Java中数组初始化的方式有很多种
int[] arr=new int[10]; // 指定数组长度,不赋值的数组声明方式
int[] arr=new int[]{1,2,3,4,5,6}; // 数组初始化时赋值的初始化方式1
int[] arr={1,2,3,4,5,5}; // 数组初始化时赋值的初始化方式2
// 注意下面几种方式也可以初始化数组,不过比较少见,但小心java基础中的选择题
int arr[]=new int[10];
int arr[]=new int[]{1,2,3,4,5};
int arr[]={1,2,3,4,5};
以下是数组中值得注意的初始化方式:
结果打印为:
说明上面三种方式都是可以初始化数组的,请务必记住
2.数组中查找元素
在数组中查找元素就很简单了,遍历一遍数组,如果存在该元素,返回下标即可,不存在该元素,直接返回 -1;
代码如下:
/*
* 数组中指定元素的查找,返回下标
* @param arr 表示数组
* @param size 表示数组中存放的元素个数
* @param ele 表示查找的数值
* */
public static int getEleIndex(int[] arr, int size, int ele) {
// 如果数组中存放的元素个数大于数组的长度,返回-1;这是传参错误导致的问题
if (size > arr.length) {
return -1;
}
int index = -1;
for (int i = 0; i < size; i++) {
if (arr[i] == ele) {
index = i;
break;
}
}
return index;
}
3.在数组中新增元素
方法一
两次遍历数组,第一次遍历找到该元素插入数组对应的位置index;第二次倒序遍历数组,将位于 index 之后的元素全部往后挪 1 位;
代码如下:
/*
* 方法一
* @param arr 表示一个有序(升序)数组
* @param size 表示数组中已经存放的元素的个数
* @param ele 表示需要插入的元素
* @return 需要返回待插入元素的插入数组后的下标;
* */
public static int addElementSequence(int[] arr, int size, int ele) {
// 表示数组已经满了,无法再插入元素了
if (size >= arr.length) {
return -1;
}
int index = -1; // 定义待插入元素的插入位置
// 已经存放的元素的总数为size,那么下标最多到达size-1
// 这就是为什么 i < size,而不是 i < size-1;
for (int i = 0; i < size; i++) {
// 找到 ele 待插入的位置,退出循环
if (ele < arr[i]) {
index = i;
break;
}
}
// 如果index==-1,说明待插入元素比原数组中存放的各个元素都大,需要插入的位置就是size对应的下标
if (index == -1) {
index = size;
}
// 注意这里为什么j从size开始向前遍历呢?
// 因为原数组中需要为ele元素预留一个位置,也就是index下标往后的位置都要向后移一个
// 原来size-1的位置对应的元素arr[size-1]需要移动到arr[size];
for (int j = size; j > index; j--) {
arr[j] = arr[j - 1];
}
arr[index] = ele;
return index;
}
传入参数 nums ={1,2,3,4,5,0}; size=5 ; ele = 0; // 表示头插法
结果如图:
传入参数 nums = {1,2,4,5,6} ; size=5 ; ele =3; // 表示向数组中间插入元素
结果如图:
传入参数 nums = {1,2,3,4,5,0};size=5; ele=6; // 表示向数组最后插入元素
结果如图:
方法二:
上面方法是先找到待插入的位置,然后将插入位置的之后的元素全部往后挪;
但其实这个过程只要一次遍历即可,即在往后挪元素的同时找到待插入的位置;
代码如下:
/*
* 向有序(升序)数组中插入元素方法II
* @param arr 表示一个有序(升序)数组
* @param size 表示数组中已经存放的元素的个数
* @param ele 表示需要插入的元素
* @return 需要返回待插入元素的插入数组后的下标;
* */
public static int addEleSequence(int[] arr, int size, int ele) {
// 表示数组已经满了,无法再插入元素了
if (size >= arr.length) {
return -1;
}
int index = size;
// 循环结束的条件是当前数组中的元素数值小于ele,或者 j < 1,或者以上条件同时满足;
for (int j = size; j >= 1 && arr[j - 1] > ele; j--) {
// 将元素往后挪一位
arr[j] = arr[j - 1];
// index记录待插入位置
index = j - 1;
}
// 一次遍历结束,该挪的元素挪了位置,同时也找出了待插入元素的下标
arr[index] = ele;
return index;
}
结果图省略。。。。。。
4.在数组中删除元素
数组删除元素需要两个步骤,第一个步骤为先遍历一遍数组,查找有无该元素;如果有获得待删除元素下标 index;如果没有则返回;第二步为删除该元素,即让index之后的元素全部往前面挪一位;同时让数组中元素的个数减1;
代码如下:
/*
* 数组中元素的删除
* @param arr 数组
* @param size 数组中元素的个数
* @param ele 待删除元素
* */
public static int delEle(int[] arr, int size, int ele) {
// 记录删除元素下标位置
int index = -1;
for (int i = 0; i < size; i++) {
if (arr[i] == ele) {
index = i;
break;
}
}
// 如果下标为-1,表示数组中不存在该元素
if (index == -1) {
// 数组中元素个数保持不变
return size;
}
for (int i = index; i + 1 < size; i++)
arr[i] = arr[i + 1];
// 数组中元素个数-1;
return --size;
}
数组的基本操作手写完成!!!