70分是纯暴力遍历的极限了吗 大佬求助(有注释)
查看原帖
70分是纯暴力遍历的极限了吗 大佬求助(有注释)
993122
xiaorunrun520楼主2023/6/30 22:37
#include<bits/stdc++.h>
using namespace std;
int n,a[200020];
bool vis[200020];
int find(){   //找到数组中最小未被访问的数
	for(int i = 1;i<=n;i++){
		if(vis[i]==false) return i;
	}
	return 0; //若找完则返回0 跳出while循环
}
int main(){
	cin>>n;
	for(int i = 1;i<=n;i++){
		cin>>a[i];
	}
	cout<<1<<" ";  //直接取出第一个
	vis[1] = true;
	int i = 1,j = 1;  //i是当前块的状态 j是往后遍历
	while(j){
		while((a[j] == a[i] || vis[j]==true) && j<=n) j++;  //寻找下一个块的开头 并跳过已经取出的
		if(j==n+1){  //若超出 则从最小的未被访问的数再次遍历
			j=find();
			cout<<endl;
			i=j;
		}
		i=j;  //更新i
		vis[j] = true;  //更新状态
		if(j!=0) cout<<j<<" ";  //若找完则不输出
	}
	return 0;
}
2023/6/30 22:37
加载中...