一、数组中插入元素
public static int addByElementSequence(int[] arr, int size, int element) {
if (size >= arr.length)//判断是否有足够位置插入
return -1;
int index = size;//index代表插入位置,初始值是nums1最后一个位置
for (int i=0; i<size; i++) {//寻找插入位置
if (element<arr[i]) {
index = i;
break;
}
}
for (int j=size; j > index; j--) {//移动元素,从数组尾部开始
arr[j] = arr[j - 1]; //index 下标开始的元素后移一个位置
}
arr[index] = element;//插入数据
return index;
}
二、删除元素
public static int removeByElement(int[] arr, int size, int key) {
int index = -1;
for(int i=0;i<size;i++){
if (arr[i] == key) {
index = i;
break;
}
}
if (index != -1) {//从index+1开始将后面的元素前移
for(int i=index+1;i<size;i++)
arr[i-1] = arr[i];
size-- ;
}
return size;
}
三、数组合并
两个数组都是升序的,“空位置”在nums1的后面,这里应该放两个数组中最大的那一些数。那么就从两个数组最后面开始比较,较大的放入空位。这样nums1中前面的位置就可以被覆盖了
public void merge(int[] nums1, int m, int[] nums2, int n) {
if(n==0)
return;
int last1=m-1;//指向nums1最大的还未进行合并的元素
int last2=n-1;//指向nums2最大的还未进行合并的元素
int i;
for(i=m+n-1;i>=0&&last1>=0&&last2>=0;i--){//把最大的元素移动到最终位置
if(nums1[last1]>=nums2[last2]){
nums1[i]=nums1[last1];
last1--;
}
else{
nums1[i]=nums2[last2];
last2--;
}
}
if(last1>=0){//循环结束检查是否有没合并的元素,将剩下的直接合并
while(i>=0&&last1>=0){
nums1[i]=nums1[last1];
last1--;
i--;
}
}
else if(last2>=0){//循环结束检查是否有没合并的元素,将剩下的直接合并
while(i>=0&&last2>=0){
nums1[i]=nums2[last2];
last2--;
i--;
}
}
}