vector<vector<int> > twoSum(vector<int> &numbers, int target, int exclude) { unordered_map<int, int>index; vector<vector<int> >result; for(int i=exclude+1; i<numbers.size(); ++i){ index[numbers[i]]++; } for(int i=exclude+1; i<numbers.size(); ++i){ int reminder = target - numbers[i]; if(reminder <= numbers[i]) continue; if(index[reminder]>0){ result.push_back(rank3(reminder, numbers[i], numbers[exclude])); } while(numbers[i]==numbers[i+1]) i++; } if(target%2==0 && index[target/2]>=2 ){ vector<int> res =rank3(target/2, target/2, numbers[exclude]); result.push_back(res); } return result; }
/* dot1_rank: * asp != NULL => g is root */ static void dot1_rank(graph_t * g, aspect_t* asp) { point p; #ifdef ALLOW_LEVELS attrsym_t* N_level; #endif edgelabel_ranks(g); if (asp) { init_UF_size(g); initEdgeTypes(g); } collapse_sets(g,g); /*collapse_leaves(g); */ class1(g); p = minmax_edges(g); decompose(g, 0); if (asp && ((GD_comp(g).size > 1)||(GD_n_cluster(g) > 0))) { asp->badGraph = 1; asp = NULL; } acyclic(g); if (minmax_edges2(g, p)) decompose(g, 0); #ifdef ALLOW_LEVELS if ((N_level = agattr(g,AGNODE,"level",NULL))) setRanks(g, N_level); else #endif if (asp) rank3(g, asp); else rank1(g); expand_ranksets(g, asp); cleanup1(g); }