예제 #1
0
 int findNumberOfLIS(std::vector<int>& V) {
   int mod = 1e9+7;
   int n = V.size();
   if (n <= 1)
     return n;
   std::vector<int> lens(n, 0);
   std::vector<int> cnts(n, 1);
   for (int i = 0; i < n; ++i) {
     for (int j = 0; j < i; ++j) {
       if (V[j] >= V[i])
         continue;
       if (lens[j] >= lens[i]) {
         lens[i] = lens[j] + 1;
         cnts[i] = cnts[j];
       } else if (lens[j]+1 == lens[i]) {
         cnts[i] = (cnts[i] + cnts[j]) % mod;
       }
     }
   }
   int maxlen = *std::max_element(lens.begin(), lens.end());
   int rslt = 0;
   for (int i = 0; i < n; ++i) {
     if (lens[i] == maxlen)
       rslt = (rslt + cnts[i]) % mod;
   }
   return rslt;
 }
 int numTrees(int n) {
     if (n < 1)
         return 0;
     vector<int> cnts(n+1, -1);
     cnts[0] = 1;
     cnts[1] = 1;
     vector<int> nums(n);
     for (int i = 0; i < n; ++i)
         nums[i] = i;
     int result = count(nums, nums.begin(), nums.end()-1, cnts);
     return result;
 }
예제 #3
0
 int characterReplacement(std::string s, int k) {
   int n = s.size();
   std::vector<int> cnts(26, 0);
   int i = 0, max_cnt = 0, max_len = 0;
   for (int j = 0; j < n; ++j) {
     max_cnt = std::max(max_cnt, ++cnts[s[j]-'A']);
     while (j - i + 1 - max_cnt > k) {
       cnts[s[i++]-'A']--;
     }
     max_len = std::max(max_len, j - i + 1);
   }
   return max_len;
 }
    /**
     * @param nums: The integer array
     * @return: The length of LIS (longest increasing subsequence)
     */
    int longestIncreasingSubsequence(vector<int> nums) {
        if (nums.size() == 0) return 0;

        vector<int> cnts(nums.size());
        cnts[0] = 1;
        for (auto i = 1u; i < nums.size(); ++i) {
            int max_cnt = 0;
            for (auto j = 0u; j < i; ++j) {
                if (nums[i] >= nums[j]) {
                    max_cnt = max(max_cnt, cnts[j]);
                };
            }
            cnts[i] = max_cnt + 1;
        }

        return *max_element(cnts.begin(), cnts.end());
    }
예제 #5
0
 string removeDuplicateLetters(string s) {
     // Greddy
     // Each time we select a character which has the smllest lexicographical order from left to right  util  we meet a non
     // -duplicate character which we cannot skip
     
     // Notice : 
     // when we meet a non-duplicate character, this means that we must select a character from the substring (s[0] .... s[pos])
     // which consists of character from beginning of the string s to the position of the non-duplicate character
     
     // The non-duplicate character has two kinds:
     //      1. it only appear once among the whole string s
     //      2. it appears many times, but we have met all of the duplicate position, this position is its last appearance
     //          so we should maintain characters' count of appearance.
     // Once we have selected a characer we must delete all same character after its position
     // find next character from the substring
     if(s.empty())
         return "";
         
     vector<int> cnts(26, 0);
     for(auto c : s)
         cnts[c-'a']++;
     // the position of the character we will select
     int pos = 0;
     for(int i = 0; i < s.length(); i++){
         // Select the smallest lexicographical order character among the duplicate characters
         if(s[i] < s[pos])
             pos = i;
         // update the cnts infomation of the chatacter we meet, 
         // if s[i] is non-duplicate, we select a character(s[pos]) immediately
         // pos is in [0...i]
         if(--cnts[s[i]-'a'] == 0)
             break;
     }
     cout <<pos << endl;
     char selected = s[pos];
     string sub_s;
     // delete all selected character after position of pos
     for(int i = pos+1; i < s.length(); i++)
         if(s[i] != selected)
             sub_s += s[i];
     
     // find next character form the substring
     string ret = selected + removeDuplicateLetters(sub_s);
     
     return ret;
 }
예제 #6
0
 string originalDigits(string s) {
     vector<int> cnts(26, 0);
     for(auto c: s)
         cnts[c-'a']++;
     string ans = "";
     static vector<pair<char, string>> uniques{{'z', "zero"},{'x', "six"},{'g', "eight"},{'s', "seven"},
                                               {'v', "five"},{'f', "four"},{'w', "two"},{'t', "three"},
                                               {'o', "one"},{'i', "nine"}};
     static vector<int> nums{0,6,8,7,5,4,2,3,1,9};
     for(int i = 0; i < 10; i++)
     {
         int k = cnts[uniques[i].first-'a'];
         for(auto c: uniques[i].second)
             cnts[c-'a'] -= k;
         ans.append(k, nums[i]+'0');
     }
     sort(ans.begin(), ans.end());
     return ans;
 }
예제 #7
0
 int coinChange(vector<int>& coins, int amount) {
     int max = amount + 1;
     vector<int> cnts(max, max);
     cnts[0] = 0;
     int n = coins.size();
     for (int i = 0; i < n; i++) {
         if (coins[i] < max) {
             cnts[coins[i]] = 1;
         }
     }
     for (int i = 1; i <= amount; i++) {
         for (int j = 0; j < n; j++) {
             int prev = i - coins[j];
             if (prev >= 1) {
                 cnts[i] = (cnts[i] < cnts[prev] + 1 ? cnts[i] : cnts[prev] + 1);
             }
         }
     }
     if (cnts[amount] == max) return -1;
     return cnts[amount];
 }
    int shortestDistance(vector<vector<int>>& grid) {
        int m = grid.size(), n = grid[0].size(), cnt = 0;
        vector<vector<int>> dists(m, vector<int>(n)), cnts(m, vector<int>(n));
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (grid[i][j] == 1) {
                    ++cnt;
                    BFS(grid, i, j, &dists, &cnts);
                }
            }
        }

        int shortest = numeric_limits<int>::max();
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (dists[i][j] < shortest && cnts[i][j] == cnt) {
                    shortest = dists[i][j];
                }
            }
        }

        return shortest != numeric_limits<int>::max() ? shortest : -1;
    }
예제 #9
0
파일: IO.cpp 프로젝트: cran/rtk
void smplVec::rarefy(vector<double> depts, string ofile, int rep,
        DivEsts* divs, std::vector<vector<rare_map>> & RareSample,
        vector<string>& retCntsSampleName, string& skippedSample,
        vector<vector<vector<uint>>>* abundInRow, vector<vector<vector<uint>>>* occuencesInRow,
        int writes,bool write, bool fillret){
    bool doShuffle = true;
    long curIdx = 0;
    long dep;
    // resize divvs
    divs->richness.resize(depts.size());
    divs->shannon.resize(depts.size());
    divs->simpson.resize(depts.size());
    divs->invsimpson.resize(depts.size());
    divs->chao1.resize(depts.size());
    divs->eve.resize(depts.size());
    
    for(uint i = 0; i < depts.size(); i++){
        dep = (long)depts[i];

        if (dep > totSum){
            skippedSample = divs->SampleName;
            #ifdef notRpackage
            if (verbose){cout<<"skipped sample, because rowSums < depth \n";}
            #endif
            return;
        }
        //long curIdx=(long)totSum+1;
        for (int curRep=0;curRep<rep;curRep++){
            if(curIdx+dep >= (long) totSum || doShuffle == true){
                shuffle_singl();	
                curIdx = 0;
                doShuffle = false;
            }


            //count up
            vector<uint> cnts(numFeatures, 0);
            for (long i=(0+curIdx);i<(dep+curIdx);i++){
                cnts[arr[i]]++;
            }


            curIdx += dep;
            string t_out = ofile;
            if (rep!=1){
                std::ostringstream oss;
                oss<<curRep;
                t_out += "_" +oss.str();
            }

            if (curRep < writes && fillret) {
                rare_map cntsMap;
                // fill map:
                for(uint i = 0; i < cnts.size(); i++){
                    if(cnts[i] != 0){
                        cntsMap.insert( std::make_pair(i, cnts[i]) );
                    }
                }
                RareSample[i].push_back(cntsMap);
                if(curRep == 0){
                    retCntsSampleName[i] = divs->SampleName; // safe the sample name as well
                }
            }
            richness = 0;
            divs->richness[i].push_back(this->getRichness(cnts));
            vector<double> three = this->calc_div(cnts, 4);
            divs->shannon[i].push_back(three[0]);
            divs->simpson[i].push_back(three[1]);
            divs->invsimpson[i].push_back(three[2]);
            divs->chao1[i].push_back(this->calc_chao1(cnts,1));
            divs->eve[i].push_back(this->calc_eveness(cnts));
            richness = 0;

            // save abundance for chao2 calculations later
            rarefyMutex.lock();
            for(uint im = 0; im < IDs.size(); im++){
                //sparse convertions in swap mode
                int id = std::stoi(IDs[im]);
                if(cnts[im] != 0){
                    abundInRow->at(i)[curRep][id]++;	
                    occuencesInRow->at(i)[curRep][id] += cnts[im];
                }
            }
            rarefyMutex.unlock();
        }
    }
}
예제 #10
0
void AsiMS2000::selectCommand(int commandNum)
{
  switch(commandNum)
  {
      case 0:
          accel();
          break;
      case 1:
          aalign();
          break;
      case 2:
          afcont();
          break;
      case 3:
          aflim();
          break;
      case 4:
          afocus();
          break;
      case 5:
          afset();
          break;
      case 6:
          afmove();
          break;
      case 7:
          ahome();
          break;
      case 8:
          aij();
          break;
      case 9:
          array();
          break;
      case 10:
          azero();
          break;
      case 11:
          backlash();
          break;
      case 12:
          bcustom();
          break;
      case 13:
          benable();
          break;
      case 14:
          build();
          break;
      case 15:
          cdate();
          break;
      case 16:
          cnts();
          break;
      case 17:
          customa();
          break;
      case 18:
          customb();
          break;
      case 19:
          dack();
          break;
      case 20:
          dump();
          break;
      case 21:
          ensync();
          break;
      case 22:
          epolarity();
          break;
      case 23:
          error();
          break;
      case 24:
          halt();
          break;
      case 25:
          here();
          break;
      case 26:
          home();
          break;
      case 27:
          info();
          break;
      case 28:
          joystick();
          break;
      case 29:
          jsspd();
          break;
      case 30:
          kadc();
          break;
      case 31:
          kd();
          break;
      case 32:
          ki();
          break;
      case 33:
          kp();
          break;
      case 34:
          lcd();
          break;
      case 35:
          led();
          break;
      case 36:
          lladdr();
          break;
      case 37:
          load();
          break;
      case 38:
          lock();
          break;
      case 39:
          lockrg();
          break;
      case 40:
          lockset();
          break;
      case 41:
          maintain();
          break;
      case 42:
          motctrl();
          break;
      case 43:
          move();
          break;
      case 44:
          movrel();
          break;
      case 45:
          pcros();
          break;
      case 46:
          pedal();
          break;
      case 47:
          rbmode();
          break;
      case 48:
          rdadc();
          break;
      case 49:
          rdsbyte();
          break;
      case 50:
          rdstat();
          break;
      case 51:
          relock();
          break;
      case 52:
          reset();
          break;
      case 53:
          rt();
          break;
      case 54:
          runaway();
          break;
      case 55:
          saveset();
          break;
      case 56:
          savepos();
          break;
      case 57:
          scan();
          break;
      case 58:
          scanr();
          break;
      case 59:
          scanv();
          break;
      case 60:
          secure();
          break;
      case 61:
          sethome();
          break;
      case 62:
          setlow();
          break;
      case 63:
          setup();
          break;
      case 64:
          si();
          break;
      case 65:
          speed();
          break;
      case 66:
          spin();
          break;
      case 67:
          status();
          break;
      case 68:
          stopbits();
          break;
      case 69:
          ttl();
          break;
      case 70:
          um();
          break;
      case 71:
          units();
          break;
      case 72:
          unlock();
          break;
      case 73:
          vb();
          break;
      case 74:
          vector();
          break;
      case 75:
          version();
          break;
      case 76:
          wait();
          break;
      case 77:
          where();
          break;
      case 78:
          who();
          break;
      case 79:
          wrdac();
          break;
      case 80:
          zero();
          break;
      case 81:
          z2b();
          break;
      case 82:
          zs();
          break;
      case 83:
          overshoot();
          break;
  }
}