构建数组
int[] arr = new int[]{0,1,2,3,5,6,8}
//或者
int[] arr = {2,5,0,4,6,-10}
推荐使用这种构建方式,除非你特别需要循环构建数组赋值
查找一个元素
/**
*
* @param arr 数组
* @param size 已存放元素个数
* @param key 目标元素
* @return 目标元素的索引
*/
public static int findElement(int[] arr,int size,int key){
for (int i = 0; i < size; i++) {
if(arr[i] == key){
return i;
}
}
return -1;
}
增加一个元素
- 此处我们要维护数组是一个有序数组,这里的数组是单调递增的
/**
*
* @param arr 数组
* @param size 已存放元素个数
* @param key 目标元素
* @return 返回插入位置的索引
*/
public static int addElement(int[] arr,int size,int key){
//首先要判断的是我们存放的元素个数是否会超过数组长度,如果当前元素个数大于等于了数组长度,就不允许添加了
if (size >= arr.length){
return -1;
}
//index就是我们目标元素要插入的索引位置
int index = size;
//这里之所以index=size而不是0或者size-1,就是有个特例就是目标元素为数组最大值
for (int i = 0; i < size; i++) {
if(key < arr[i]){
index = i;
break;
}
}
/**
上面是我们寻找插入位置,如果index初始值不为size,那么它若为最大值,它比arr[size-1]还大
索引是从0到size-1,如果index为其他值,最终插入的位置都不对,你找个最大值的例子就知道了
*/
//元素后移,这里j初始化为size也是由于index的值可能为size的原因
for (int j = size; j > index; j--){
arr[j] = arr[j - 1];
}
//插入元素
arr[index] = key;
return index;
}
删除一个元素
/**
*
* @param arr
* @param size
* @param key
* @return 返回数组剩余的元素个数
*/
public static int removeElement(int[] arr,int size,int key){
//初始化index为-1,算一个标记吧,如果之后遍历数组也没找到目标元素,index仍然为-1就可以结束了
int index = -1;
for (int i = 0; i < size; i++){
if (arr[i] == key){
index = i;
break;
}
}
//这里只能从左往右赋值
if(index != -1){
for (int i = index + 1; i < size ; i++) {
arr[i - 1] = arr[i];
}
size--;
}
return size;
}