当前位置: 首页 > news >正文

【C语言】移除元素

移除元素


给你一个数组 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 索引不增长。

相关文章:

  • 代码随想录算法【Day47】
  • 解决`Illegal group reference: group index is missing`的两种方式
  • 【linux学习指南】⽣产者消费者模型
  • python电影数据分析及可视化系统建设
  • 深度学习在天文观测中的应用:解锁宇宙的奥秘
  • `fi` 是 Bash 脚本中用来结束 `if` 条件语句块的关键字
  • 数位dp入门详解
  • [Vivado报错] [Common 17-55]‘set_property‘ expects at least one object
  • 【数据库维护】Clickhouse数据库维护关键系统表相关指标说明,支撑定位慢SQL及多实例场景下分析各实例运行情况
  • 【Java基础-46.1】Java 中创建自定义泛型类及其应用
  • 【机器学习】常见采样方法详解
  • AtCoder - arc101_b Median of Medians 分析与解答
  • 2009年下半年软件设计师上午真题的知识点整理(附真题及答案解析)
  • Kubernetes-master 组件
  • 25/2/16 <算法笔记> MiDas原理
  • ElasticSearch详解
  • 【开源免费】基于Vue和SpringBoot的美食烹饪互动平台(附论文)
  • 【HUSTOJ 判题机源码解读系列03】judge.cc 源码详细注释
  • 端到端测试利器:Playwright入门教程
  • 力扣 66.加一 (Java实现)
  • 巴基斯坦对印度发起网络攻击,致其约70%电网瘫痪
  • 本周看啥|喜欢二次元的观众,去电影院吧
  • 妻子藏匿一岁幼儿一年多不让丈夫见,法院发出人格权侵害禁令
  • 习近平《在庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会上的讲话》单行本出版
  • 默茨在第二轮投票中当选德国总理
  • 多省份晒出“五一”旅游“成绩单”:北京游客接待量、旅游消费创历史新高