vector<int> searchRange(int A[], int n, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> range(2); range[0] = searchLeft(A, 0, n-1, target); range[1] = searchRight(A, 0, n-1, target); return range; }
Node* findNext(Node *root) { if(0 == root) return root; if (root->parent == null || root->rChild) return searchLeft(root->rChild); while (root->parent != null) { if(root->parent->lChild == root) return root->parent; root = root->parent; } return 0; }
bool contains(const kmer_t & A) { auto in_bf = bf_.lookup(A); // if A is not in BF -- return right away if (!in_bf) { return in_bf; } extended_check++; auto left_in_bf = searchLeft(A, extend_len, k, &bf_); if (in_bf && left_in_bf) { return true; } // here, even if kmer A is in the BF, may return false b.c. its extension is not in BF extended_check++; auto right_in_bf = searchRight(A, extend_len, k, &bf_); if (in_bf && right_in_bf) { return true; } return false; }
bool contains(const kmer_t & kmer){ if(!bf_.lookup(kmer)){ return false; } extended_check++; bool containsLeft = searchLeft(kmer,extend_len,k,&bf_); bool containsRight = searchRight(kmer,extend_len,k,&bf_); if(containsLeft && containsRight){ return true; } if(containsLeft || containsRight){ //assumes read length > k+extend_len edge_check++; if(edge_kmers.find(kmer)!=edge_kmers.end()){ edge_pass++; return true; } } return false; }