1. 数组的基本操作
length属性:用于获取数组的长度;arr4初始化长度为20,但未赋值,arr4.length = 20 !!!
int[] arr4 = new int[20];
size:通常用来表示数组内有效元素的个数
数组的创建和初始化
//在初始化数组时指定了大小,但并未赋值(数组内的值默认初始化为0)
int[] arr1 = new int[10];
//数组的赋值
//方式1:初始化数组并赋值(创建数组时的大小就是数组元素的数量,无法进行添加操作)
int[] arr2 = new int[]{1,2,3,4,5};
//方式2(实用)
int[] arr3 = {6,4,3,2,1};
查找一个元素
//arr要查找的数组,size数组内存放的元素个数,value要查找的值
public static int findIndexByElement(int[] arr,int size,int value){
for (int i = 0; i < size; i++) {
if (arr[i]==value)
return i;
}
return -1;
}
增加一个元素
思路:首先!进行数组是否可以进行元素添加的空间判断!遍历数组找到要插入的索引位置,并让数组索引往后元素后移,最后将元素插入...
public int addOneElement(int[] arr,int size,int value){
//判断是否有空间新增元素
if (size >= arr.length){
return -1;
}
//index初始化为size:当数组元素都小于要插入元素,元素最后在数组末端插入
int index = size;
//遍历数组查找新增元素的索引位置
for (int i = 0; i < arr.length-1; i++) {
if (value<arr[i]){
index = i ;
break;
}
}
//把索引index后元素右移
for (int j = size; j > index; j--) {
arr[j] = arr[j-1];
}
arr[index] = value;
return index;
}
删除一个元素
思路:定义index属性:删除元素的索引位置,-1则找不到元素;遍历数组得到删除元素的索引位置,最后该索引位置的后元素前移...
//返回的是数组的有序元素个数
public int deleteOneElement(int[] arr,int size,int value){
int index = -1;
//遍历数组,找到要删除元素的索引
for (int i = 0; i < size; i++) {
if (arr[i]==value){
index=i;
break;
}
}
//找到了删除元素的索引
if (index!=-1){
for (int i = index+1; i <size ; i++) {
arr[i-1]=arr[i];
}
size--;
}
return size;
}
2. 单调数组问题
思路:可以定义两个变量,用来表示数组是否单调增或者单调减
注意!!!判断数组是否单调,应该在有效元素内判断,而不是在数组的空间范围内判断
public boolean isMonotonous(int[] arr,int size){
boolean inc = true;
boolean dec = true;
for (int i = 0; i < size-1; i++) {
if (arr[i]>arr[i+1]){
inc = false;
}
if (arr[i]<arr[i+1]) {
dec = false;
}
}
return inc || dec ;
}
3. 数组合并问题
参数:数组1,2(两数组是非递减顺序排列),数组1的有效元素个数M,数组2的有效元素个数N
注意:合并后数组不由函数返回而是存贮在数组1中,隐藏条件数组1的初始空间大小应该是 M + N
第一种方法
思路:可以先把数组2拼接到数组1后面,然后进行排序
public void mergeOneMethod(int[] arr1,int[] arr2 ,int arr1_length,int arr2_length){
for (int i = 0; i < arr2_length ; i++) {
arr1[arr1_length+i] = arr2 [i];
}
Arrays.sort(arr1);
}
第二种方法
思路:从后往前遍历两数组,每次比较两数组的最后一个元素的值,并将值大的元素插入数组1的末尾,以此类推直到两数组遍历完...
public void mergeTwoMethod(int[] arr1,int[] arr2 ,int arr1_length,int arr2_length) {
//index是arr1数组的最后一个元素的索引
int index = arr1_length + arr2_length -1;
int i = arr1_length - 1;
int j = arr2_length - 1;
while (i>=0 && j>=0){
if (arr1[i]>=arr2[j]){
arr1[index--] = arr1[i--];
}else {
arr1[index--] = arr2[j--];
}
}
//假如数组1,2还有剩余元素
while (i != -1) arr1[index--] = arr1[i--];
while (j != -1) arr1[index--] = arr2[j--];
}