数组题目之移除元素

<leedcode>

27.移除元素https://leetcode.cn/problems/remove-element/

题目条件:给定一个数组nums和一个val值,原地移除数组中等于val的元素

返回:nums中元素的数量

法一:暴力解法:使用两个for循环嵌套

外层for循环:遍历数组元素看是否有等于val的元素

内层for循环:如果数组中有等于val的元素,执行内层for循环,将后面的元素依次往前移

cpp 复制代码
#include<stdio.h>
//移除元素函数
//参数:数组首地址,数组长度,要删除数组中的值
int removeElements(int* data, int len, int val)
{
	//暴力解法:使用两个for循环解决
	
	for (int i = 0; i < len; i++)
	{
		if (data[i] == val)
		{
			//使用for循环将所有元素整体前移一位覆盖数组i下标上的元素
			//for (int j = i; j < len - 1; j++)//或者写成
              for (int j = i + 1; j < len; j++)
			{
				//data[j] = data[j + 1];//或者写成
                  data[j - 1] = data[j];
				
			}
			i--;//因为i下标后移了一位
			len--;//数组长度在改变
		}
	}
	return len;
}
//实现
int main()
{
	int data[] = { 2, 4, 5, 6, 6, 6, 6 };
	int len = sizeof(data) / sizeof(data[0]);
	int result = removeElements(data, len, 5);//数组元素个数:6
	printf("数组元素个数:%d", result);
	return 0;
}
时间复杂度:O(n**2)
空间复杂度:O(1)

法二:双指针法

初始时:slow,fast均指向0下标

思路:快指针fast通过for循环遍历数组,如果下标fast指向的数组元素不等于val,则将下标fast指向的元素赋值给下标slow指向的元素,同时下标slow++

cpp 复制代码
#include<stdio.h>
//移除元素函数
//参数:数组首地址,数组长度,要删除数组中的值
int removeElements(int* data, int len, int val)
{
	//双指针法
	//起始时:慢指针slow指向下标为0的元素,快指针指向下标为0的元素
	int slow = 0;
	for (int fast = 0; fast < len; fast++)
	{
		if (data[fast] != val)//遍历下标对应元素不为val的值赋值给data[slow]
		{
			data[slow] = data[fast];
			slow++;
		}
	}
	return slow;
}
//实现
int main()
{
	int data[] = { 2, 4, 5, 6, 5, 6, 6 };
	int len = sizeof(data) / sizeof(data[0]);
	int result = removeElements(data, len, 5);
	printf("数组元素个数:%d", result);
	return 0;
}
时间复杂度:O(n)
空间复杂度:O(1)
相关推荐
全糖可乐气泡水1 小时前
Codex适配国产信创环境安装部署与技术适配全解析
开发语言·git·python·算法·百度
h_a_o777oah1 小时前
状态机+划分型 DP :深度解析K-划分问题下 DP 状态的转移逻辑(洛谷P2679 P2331 附C++代码)
c++·算法·动态规划·acm·状态机dp·划分型dp·滚动数组优化
05候补工程师1 小时前
从算法理想向工程现实的跨越:SLAM 核心架构、思维误区与 Nav2 实战避坑指南
人工智能·算法·安全·架构·机器人
手写码匠2 小时前
Android 17 适配实战指南:新特性解读、隐私变更与迁移全攻略
人工智能·深度学习·算法·aigc
珊瑚里的鱼3 小时前
leetcode42雨水
算法·leetcode
水木流年追梦3 小时前
大模型入门-大模型的推理策略
开发语言·python·算法·正则表达式·prompt
生成论实验室3 小时前
用事件关系网络重新理解AI(三):激活函数、微调与元学习
人工智能·学习·算法·语言模型·可信计算技术
Narv工程师3 小时前
嵌入式机器人控制器算力评估:从DMIPS到WCET的完整指南
人工智能·算法·机器学习
蒟蒻的贤3 小时前
实训1227
算法
liulilittle3 小时前
TCP UCP:基于卡尔曼滤波的BBR增强型拥塞控制算法
linux·网络·c++·tcp/ip·算法·c·通讯