【发布时间】:2022-01-16 08:03:28
【问题描述】:
我不打算在这里使用任何数据结构,因为我对它们一无所知。所以我只使用数组......在这种方法中,时间复杂度降低到 O(n),并且算法类似于散列......有点......所以问题很简单,它没有运行。它根本没有在我的 VS 代码中运行。我还尝试了在线 C++ 编译器,我给出的每个输入的输出都为 1。发生了什么?
#include <iostream>
#include <climits>
using namespace std;
int main()
{
int n;
cin>>n;
int array[n];
for(int i=0;i<n;i++){
cin>>array[i];
}
const int N=1e6+2;
int idx[N];
for(int i=0;i<N;i++){
idx[i]=-1;
}
int min_index=INT_MAX;
for(int i=0;i<n;i++){
if(idx[array[i]]==-1){
idx[array[i]]=i;
}
else{
min_index=min(min_index,idx[array[i]]);
}
}
cout<<min_index<<endl;
return 0;
}
【问题讨论】:
-
只计算你的值,当你第二次计算一个值时会中断。
-
只需将当前项与下一项进行比较,如果相同则返回索引
-
附带说明 - 当
n不是编译时间常数时,int array[n];是 not standard C++。 -
数组没有排序,所以我们不能只比较当前元素和下一个元素
-
不运行是什么意思?编译运行有困难吗?