我想编写一个需要 2 个数组的函数——
一个数组是源数组,另一个数组是索引数组。
我想从第二个数组中删除源数组索引处的所有元素。
假设第一个数组是:{12,5,10,7,4,1,9},索引数组是:{2,3,5}。
然后是索引 2,3,5 处的元素。即从第一个数组中删除 10、7 和 1。
所以第一个数组变成:{12,5,4,9}。
如果索引数组已排序,那么我的 O(N) 解决方案是:
#include<iostream>
using namespace std;
int main()
{
int arr[]={12,5,10,7,4,1,9},n=7,indices[]={2,3,5},m=3;
int j=0,k=0;
for(int i=0;i<n,k<m;i++)
{
if(i!=indices[k])
arr[j++]=arr[i];
else
k++;
}
for(i=0; i<j; i++)
cout<<arr[i]<<" ";
return 0;
}
如果索引数组未排序,如何在 O(n) 中完成?