问题背景
删除数组中指定索引的元素,传统的做法循环执行array[i]=array[i+1],复杂度为O(N)。如果数组的元素较多,且删除的索引比较靠前,如果继续采用传统方式就会移动大量元素,效率低下。
解决思路
直接将最后一个元素值赋值到将要被删除的元素索引,复杂度为O(1)
public static int[] DelElementInArray(int[] array,int index)
{
if (index < array.Length - 1)
array[index] = array[array.Length - 1];
//数组长度减一
Array.Resize(ref array, array.Length - 1);
return array;
}
测试用例
准备一个数组{1,2,3,4,5},删除索引为1的元素2。
static void Main(string[] args)
{
int[] array = new int[] { 1, 2, 3, 4, 5 };
array=DelElementInArray(array, 1);
foreach (var item in array)
{
Console.Write(item + " ");
}
}
测试结果
总结
对数组元素的顺序没有要求,且删除指定索引的位置比较靠前(越靠前这种方式的优势越能体现),采用这种方式可以降低程序的复杂度