我想编写一个需要 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;
}
Run Code Online (Sandbox Code Playgroud)
如果索引数组未排序,如何在 O(n) 内做到这一点?
我试图找到大数量产品的因素.
问题陈述是这样的:假设给你N个数字(假设N = 10),每个数字<= 1000000.如何找到这些数字乘积的因子数.
有人可以提供一个有效的算法来做到这一点.
示例:
1)N = 3,数字为3,5,7
Ans = 8(1,3,5,7,15,21,35,105)
2)N = 2且数字为5,5
Ans = 3(1,5和25)