网站建设绩效考核方案ppt/全网营销骗局揭秘
移除元素
给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
#include <stdio.h>/*** RemoveElement函数用于移除数组中所有与指定值相同的元素。* 通过双指针技术,遍历数组并将不等于指定值的元素移动到数组的前部。* * @param nums 数组的指针,数组中的元素类型为char。* @param numsSize 数组的长度,类型为char,表示数组中元素的数量。* @param val 指定的值,类型为char,函数将移除数组中所有与该值相同的元素。* @return 返回移除指定值后数组的新长度,类型为int。*/
int RemoveElement(char* nums, char numsSize, char val)
{// 初始化两个指针i和j,它们都从数组的起始位置开始。int i = 0;int j = 0;// 遍历数组中的每个元素。for (i = 0; i < numsSize; i++){// 如果当前元素不等于指定值,则将其移动到j指针的位置,并将j向前移动。if (nums[i] != val){nums[j] = nums[i];j++;}}// 返回新数组的长度,即j的值。return j;
}// 主函数
int main()
{// 初始化一个字符数组,用于后续操作char arr[]={1,2,3,4,5,1,2,3,4,5};// 计算数组长度char arr_Length = sizeof(arr)/sizeof(arr[0]);// 初始化一个变量len,用于存储数组长度char len = 0;// 打印数组长度printf("%d\n",arr_Length);// 遍历并打印数组元素for (int i = 0; i < arr_Length; i++){printf("%d ",arr[i]);}printf("\n");// 调用RemoveElement函数移除数组中特定的元素,并更新数组长度len = RemoveElement(arr,arr_Length,1);// 打印更新后的数组长度printf("%d\n",len);// 遍历并打印更新后的数组元素for (int i = 0; i < len; i++){printf("%d ",arr[i]);}return 0;
}
采用快指针和慢指针的方法:在 RemoveElement 函数中设置两个索引,分别进行快指引和慢指引,其中 i 为快指引,j 为慢指引。当数组中的元素和目标元素不一样时,进行将 i 索引的数据赋值到 j 索引上,当当数组中的元素和目标元素一样时,不赋值,且 j 索引不增长。