算法通关村——不简单的数组增删改查

一、数组介绍

数组和链表一样是一种线性的数据结构,它的特点主要有两个:长度固定和空间连续。相对链表来说,数组的查询速度较快,这是它的优势。在算法中,数组是一些高级算法的载体,它最容易出错,也是最恶心的地方就是它的边界条件。下面我们首先研究下数组的插入和删除,需要特别注意的就是它的边界条件。

二、数组插入元素

/**
 * 在单调递增数组插入元素
 *
 * @param nums 单调递增的数组
 * @param size 数组已经存储的元素数量,从1开始
 * @param element 要插入的元素
 * @return 插入新元素后的数组
 */
private static int insertSequenceArray(int[] nums, int size, int element) {
	// 如果数组的大小小于 size + 1,说明数组已经无法添加元素
	if (nums.length <= size) {
		return -1;
	}
	int index = size;
	for (int i = 0; i < size; i++) {
		if (nums[i] > element) {
			index = i;
			break;
		}
	}
	// 移动数据
	for (int i = size; i > index; i--) {
		nums[i] = nums[i - 1];
	}
	// 插入数据
	nums[index] = element;
	size++;
	return index;
}

三、数组删除元素

数组删除元素后,原数组存储最后一个元素的位置有两种处理,一是保持不变,二是设置成初始值。此处选择第二种处理方式。

/**
* 删除数组中的元素
 *
 * @param nums 原始数组
 * @param size 数组已经存储的元素数量,从1开始
 * @param element 待删除的元素值
 * @return 新的数组
 */
private static int removeElement(int[] nums, int size, int element) {
	int index = -1;
	// 先查找目标
	for (int i = 0; i < size; i++) {
		if (nums[i] == element) {
			index = i;
			break;
		}
	}
	// 删除
	if (index != -1) {
		for (int i = index; i <= size; i++) {
			nums[i] = nums[i + 1];
		}
		size--;
	}
	return size;
}

以上皆为个人愚见,欢迎补充更好的方法~~ 如有不足之处,也请不吝赐教,帮忙指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值