移除元素

news/2024/9/29 20:00:07

第一个想法就是利用两个for循环暴力解决

#include <iostream>  
#include <vector>  using namespace std;  class Solution {  
public:  int removeElement(vector<int>& nums, int val) {  int size = nums.size();  int writeIndex = 0; // 用来记录当前应该写入的索引位置  for (int readIndex = 0; readIndex < size; readIndex++) {  if (nums[readIndex] != val) { // 发现不需要移除的元素,则写入到当前位置  nums[writeIndex] = nums[readIndex];  writeIndex++; // 写入位置后移  }  }  return writeIndex; // 返回新的数组大小  }  
};  int main() {  // 示例输入  vector<int> nums = {3, 2, 2, 3};  int val = 3;  // 创建Solution对象并调用removeElement函数  Solution solution;  int newLength = solution.removeElement(nums, val);  // 输出结果  cout << "New array size: " << newLength << endl;  cout << "New array: ";  for (int i = 0; i < newLength; i++) {  cout << nums[i] << " ";  }  cout << endl;  return 0;  
}

第二个双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新 新数组下标的位置

#include <stdio.h>  int removeElement(int* nums, int numsSize, int val) {  int i = 0; // 指向当前有效元素的下一个位置  for (int j = 0; j < numsSize; j++) {  if (nums[j] != val) {  nums[i] = nums[j]; // 将不等于val的元素移到前面  i++; // 有效元素个数增加  }  }  return i; // 返回新数组的长度  
}  int main() {  int nums[] = {3, 2, 2, 3};  int val = 3;  int numsSize = sizeof(nums) / sizeof(nums[0]);  int newLength = removeElement(nums, numsSize, val);  printf("新的数组长度为: %d\n", newLength);  for (int i = 0; i < newLength; i++) {  printf("%d ", nums[i]);  }  printf("\n");  return 0;  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/66291.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

学年(2024-2025-1) 学号(20241424)《计算机基础与程序设计》第一周学习总结

学年(2024-2025) 学号(20241424)《计算机基础与程序设计》第一周学习总结 作业信息 |这个作业属于2024-2025-1-计算机基础与程序设计)| |-- |-- | |这个作业要求在2024-2025-1计算机基础与程序设计第一周作业)| |这个作业的目标|<参考上面的学习总结模板,把学习过程通…

Qt - 文件操作3

8. QSettings8.1 简介 用户通常希望应用程序在会话中记住它的设置(窗口大小和位置,选项等)。 这些信息通常存储在Windows上的系统注册表中(HKEY_CURRENT_USERSoftware/MySoft ),以及macOS和iOS上的属性列表文件中。 在Unix系统上,在缺乏标准的情况下,许多应用程序(包括KDE应…

CSP模拟5

T1光 我们来考虑一个格加 \(4\) 或者减 \(4\) ,这样有一个比较好的性质,它能提供 \(4,2,2,1\) 的贡献还不会溢出,这样我们就有一个比较好的思路,我们枚举 \(4,2,2,1\) 所无法造成的贡献,很明显只有 \(16\) 种,然后我们就可以再枚举 \(4,2,2,1\) 来算贡献.点击查看代码 #in…

Qt - 文件操作2

4. QFileInfo 4.1 简介 QFileInfo类提供与系统无关的文件信息,QFileInfo提供了关于文件的名称和在文件系统中的位置(路径)、它的访问权限以及它是目录还是符号链接等信息。文件的大小和最后修改/读取时间也可用。 4.2 常用方法bool isDir() const //.如果该对象…

prometheus学习笔记之alertmanager告警配置

一、安装alertmanager 项目地址:https://github.com/prometheus/alertmanager 帮助文档:https://prometheus.io/docs/alerting/latest/alertmanager/ 配置文档:https://prometheus.io/docs/alerting/latest/configuration/wget https://github.com/prometheus/alertmanager/…

[clickhouse] Clickhouse 关键特性的版本支持与演变

clickhouse 21.10 Feature : UDF用户可通过添加lambda表达式,创建自定义FunctionCREATE FUNCTION linear_equation AS (x, k, b) -> k*x + b; SELECT number, linear_equation(number, 2, 1) FROM numbers(3);CREATE FUNCTION parity_str AS (n) -> if(n % 2, odd, even…

RTE 大会报名丨智能编解码和 AI 生成视频 ,RTE2024 技术专场第五弹!

AI 视频的爆炸增长,给新一代编解码技术提出了什么新挑战?语音 AI 实现 human-like 的最后一步是什么?当大模型进化到实时多模态,又将诞生什么样的新场景和玩法?所有 AI Infra 都在探寻规格和性能的最佳平衡,如何构建高可用的云边端协同架构?AI 加持下,空间计算和新硬件…