C++程序 删除数组中所有出现的元素
本文将介绍如何使用C++程序删除数组中所有元素的出现。下面是一些示例:
输入: {1、4、3、6、8、3、9、10、3、3、7}
目标元素:3
输出: {1、4、6、8、9、10、7}
输入: {12、11、10、17、12、4、7、12}
目标元素:12
输出: {11、10、17、4、7}
有两种方法可以在C++中删除数组中所有元素的出现:
- 暴力法。
- 优化方法(原地移位)。
让我们开始逐个讨论这些方法。
1. 暴力法
在这种方法中,创建另一个数组并复制除目标元素以外的所有元素。以下是使用暴力方法删除数组中所有元素的C++程序:
// C++程序:删除所有出现的元素
#include <iostream>
using namespace std;
void remove_all_occurrence(int arr[],
int target,
int n)
{
int cnt = 0;
// 计算目标元素的所有出现次数
for(int i = 0; i < n; i++)
{
if(arr[i] == target)
cnt++;
}
// 创建新数组,大小为原数组大小减去目标元素的数量
int new_arr[n - cnt];
int ind = 0;
for(int i = 0; i < n; i++)
{
if(arr[i] != target)
{
new_arr[ind] = arr[i];
ind++;
}
}
// 输出新数组
int m = (sizeof(new_arr) /
sizeof(new_arr[0]));
for(int i = 0; i < m; i++)
{
cout << new_arr[i] << " ";
}
return;
}
// 主函数
int main()
{
int arr[]={1、4、3、6、8、3、9、10、3、3、7};
int target = 3;
int n = (sizeof(arr) /
sizeof(arr[0]));
remove_all_occurrence(arr, target, n);
return 0;
}
输出
1 4 6 8 9 10 7
时间复杂度: O(n)
空间复杂度: O(n)
2.优化方法(原地移位)
在此方法中,将非目标元素移至左侧。
- 检查当前元素是否为目标元素。
- 如果它是目标元素,则增加计数器 cnt 。
- 在此元素之后,所有的非目标元素将以 (n-cnt) 的间隔向左移动。
以下是使用优化方法删除数组中所有元素的C++程序:
// C++程序:使用优化方法删除数组中所有元素的出现
#include <iostream>
using namespace std;
void remove_all_occurrence(int arr[],
int target,
int n)
{
int cnt = 0;
// 将非目标元素移至左侧
for(int i = 0; i < n; i++)
{
if(arr[i] != target)
{
arr[i - cnt] = arr[i];
}
else
{
cnt++;
}
}
// 输出数组
for(int i = 0; i < (n - cnt); i++)
{
cout << arr[i] << " ";
}
return;
}
// 主函数
int main()
{
int arr[] = {1、4、3、6、8、3、9、10、3、3、7};
int target = 3;
int n = (sizeof(arr) /
sizeof(arr[0]));
remove_all_occurrence(arr, target, n);
return 0;
}
输出
1 4 6 8 9 10 7
- 时间复杂度:O(n)
- 空间复杂度:O(1)