好像直接set就能过O(n)
查看原帖
好像直接set就能过O(n)
1202462
xuanyuan1楼主2024/3/13 22:26
#include <iostream>
#include <unordered_set>
using namespace std;

unordered_set<int> appear0;
unordered_set<int> appear1;

int main(){
	int n;
	cin >> n;
	unordered_set<int>* p=&appear0,*p1=&appear1;
	
	for(int i=1;i<=n;i++){
		int w;
		cin >> w;
		(*p1).insert(w);
		for(int i:*p){
			(*p1).insert(i);
			(*p1).insert(i+w);
			(*p1).insert(i-w);
		}
		unordered_set<int>* p2=p;
		p=p1;
		p1=p2;
	}
//	for(int i:*p) cout << i << " ";
//	cout << endl;
	unordered_set<int> ans;
	for(int i:*p) if(i!=0) ans.insert(abs(i));
	cout << ans.size();
}

这个时间复杂度应该是O(n)吧,思路有问题吗,为什么我在题解没看到相关解法

2024/3/13 22:26
加载中...