手撕C语言题典——移除元素(顺序表)

2024-04-29 18:12

本文主要是介绍手撕C语言题典——移除元素(顺序表),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

搭配使用更佳哦~~

数据结构之顺顺顺——顺序表-CSDN博客

数据结构之顺序表的基本操作-CSDN博客

前面学了顺序表的相关知识,我们来尝试做一下关于顺序表的经典算法题~

前言 

27. 移除元素 - 力扣(LeetCode)

       移除元素作为力扣上的一道不算太难的算法题,很适合刚学过顺序表的我们拿来练手,大家也可以去力扣上自己 try 一下~

 一.思路

      我们先来理解一下题干:假设我们有一个这样的数组 nums:

nums

       假设 val = 3 ,那我们需要将 nums 中的 3 全部移除,于是我们数组元素 4 - > 2 ,这就是题干大致的意思,理解了题干后我们开始求解。

1)临时数组

      我们首先可以想到最简单的方法就是,创建一个新的数组,遍历原数组,将不为 val 的值放入新数组。

但由于题干中的限定条件:

这个方法只能pass掉。

2) 双指针

我们创建两个指针:

      src:源数据

      dst:目标指针

      我们假设还是这个数组元素,使用 src 这个指针开始遍历,如果元素是 val (也就是要删除的数据)就往后面的元素去遍历,当指向不是 val 的元素时,我们就把 src 指向的元素给给 dst ,然后 dst 自身 ++ ,向后面元素走一位, src ++。依次往后遍历 ,最终 src 跳出数组,dst 刚刚好等于2,就是我们想要得到的新数组。

我们可以总结一下双指针的思路了:

创建两个指针变量 src , dst  

  • 若 src 指向的值为 val,则 src++
  •  若 src 指向的值不为 val ,nums [ dst ] = nums [ src ],src ++,dst ++

 二.代码实现

int removeElement(int* nums, int numsSize, int val) {
//先创建两个变量
int src, dst;
src = dst = 0;
while (src < numsSize)
{if (num[src] == val){src++;}else {//赋值,两指针nums[dst] = nums[src];dst++;src++;}
}
//此时刚好dst是我们需要的新数组有效长度
return dst;}

 下一篇会接着将另一道有关顺序表的算法题~~

🎈🎈完结撒花🎈🎈 

这篇关于手撕C语言题典——移除元素(顺序表)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/946793

相关文章

【js刷题:数据结构链表篇之移除链表元素】

移除链表元素 一、定义链表节点(面试时要自己写)二、题目三、移除头节点1、直接在原链表中操作移除2、设置一个虚拟头结点在再进行删除操作 四、解题代码 一、定义链表节点(面试时要自己写) class ListNode {val;next = null;constructor(value) {this.val = value;this.next = null;}} 二、题目

我是这样学习Linux下C语言编程的-RPC远程调用编程

事前準備: a.安裝rpcgen #apt-get install  libc-dev-bin b.安裝c compiler # apt-get install  build-essential 在查看libc6-dev软件包提供的工具(用 dpkg -L libc6-dev 命令)的时候,发现此软件包提供了一个有用的工具rpcgen命令。通过rpcgen的man手册看到此工具的作用是把R

【Power BI】DAX语言 VS Power Query M语言

DAX(Data Analysis Expressions)和Power Query M语言是Microsoft Power BI和Excel中的两种强大的数据处理和分析工具。尽管它们在许多方面都有重叠之处,特别是用于数据建模和数据转换,但它们在用途、语法和功能上有显著的区别。本文将详细探讨DAX和Power Query M语言的区别。 一、定义与用途 DAX: DAX(Data Ana

Go语言--字符串的使用

一 字符串类型 字符串在Go语言中是以原生数据类型出现的,使用字符串就像使用其他基本类型(int、bool、float32、float64等)一样。Go语言中,使用关键字string来声明字符串变量。  字符串的值为双引号中的内容,可以在Go语言的源码中直接添加非ASCII码字符。示例代码如下: str := "Hello, Golang"ch := "中文" 1.1 字符串转义符

Go语言--变量、常量

一、变量 1.1 声明变量 1、标准格式 var 变量名 变量类型 Q:为什么Go语言把数据类型放在后面? 答:Go语言这是一种自左向右的声明风格,这种声明的风格的好处是,变量名和类型是完全分隔的。当类型变得复杂时,它的价值就体现出来了。 特别类型是函数指针的时候,C语言的声明语法容易让人弄混淆,而Go语言的这种自左向右的声明语法,即使在冗长的声明中也能很清晰地知

C语言 — 宏命令的使用

宏的命名规则建议 规则1:对于数值或者字符串等常量的定义,建议采用全大写的英文字母,单词之间加下划线‘_’的方式命名(枚举常量同样建议使用此方式定义)。 示例: #define PI_ROUNDED 3.14 获取结构体成员变量所占的内存空间大小的宏定义 #define member_size(type, member) sizeof(((type *)0)->member) 说明如下

嵌入式C语言与人工智能:从基础到高级应用

文章主题 本教程将介绍如何在嵌入式系统中使用C语言实现人工智能应用,特别是如何在资源受限的嵌入式设备上进行神经网络推理。 本文将详细介绍环境准备、基础知识、代码示例及其应用场景,并提供常见问题的解决方案与优化方法。 2. 环境准备 硬件 开发板:例如STM32F746 Discovery Kit。调试器:ST-LINK V2或JTAG调试器。 软件 集成开发环境(IDE):STM32

C语言循环队列

循环队列是一种队列的实现方式,它可以在固定大小的数组上实现队列的循环使用。当队列尾部达到数组的末尾时,如果数组前面还有空闲位置,尾部就会回到数组的开头,形成一个循环。 #include <stdio.h>#include <stdlib.h>#define MAX_SIZE 5// 定义循环队列结构体typedef struct {int items[MAX_SIZE];int front,

LoRA Land: 310个经微调的大语言模型可媲美GPT-4

摘要 低秩自适应 (LoRA) 已成为大语言模型 (LLM) 参数有效微调 (PEFT) 中最广泛采用的方法之一。LoRA 减少了可训练参数的数量和内存使用,同时达到了与全面微调相当的性能。该研究旨在评估在实际应用中训练和服务使用 LoRA 微调的 LLM 的可行性。首先,该研究测量了在 10 个基础模型和 31 个任务上使用量化低秩适配器微调的 LLM 的质量,总共有 310 个模型。研究发现

面试题14. 调整数组顺序使奇数位于偶数前面

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路1: 用两个list分别存储奇数和偶数,然后再合并到array中 空间换时间O(n),方法比较傻比较傻。 在面试时,注意方法的可扩展性,比如题目可以换成:使得所有的能被3整除的数位于数组的前半部分,其余不被3整除