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;
}
Beispiel #3
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;
 }
Beispiel #4
0
 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;
 }