亚麻:Cache Missing

这是亚麻OA 题

// find all the N substring with only one duplicate character.
#include <iostream>     // std::cout
#include <algorithm>    // std::make_heap, std::pop_heap, std::push_heap, std::sort_heap
#include <vector>       // std::vector
#include <unordered_map>
#include <unordered_set>
#include <numeric>
#include <sys/time.h>
#include <list>

//main point : use list to store the cached elements.
//solution : using list to store the cached elements and then iterate the input sequence.
using namespace std;

int CacheMiss ( vector<int>& nums, int size){
    std::list<int> ls;  //why use list? frequently delete and insert.
    
    int missCnt =0;
    for (auto& e: nums){
        if (ls.size() < size){
            ls.push_back (e);
            missCnt ++;
            cout<< "missing "<< e << endl;
            continue;
        }

        auto itor = find(ls.begin(),ls.end(),e);
        if (itor != ls.end()){//e exist in list. hit.  delete the exist one in the list and push_back it into list again.
            ls.erase(itor);
            ls.push_back(e);
               cout<< "hiting "<< e << endl;
        }
        else {// missing     delete  the first one in the list and push_back new one into list.
            cout<< "pop out " <<ls.front();
            ls.pop_front();
            
            ls.push_back(e);
           cout<< " missing "<< e << endl;
            missCnt ++;
        }    
    }
    return missCnt;
}
int main () { //get the start time. struct timeval tv; gettimeofday(&tv,NULL); long ts = tv.tv_sec * 1000 + tv.tv_usec / 1000; //*** call the function . vector<int> in = {1, 2, 3, 4, 5, 4, 1}; auto out = CacheMiss(in , 4); cout<< " the missing time is: " << out << endl; //*** end of the call //get the time of end. gettimeofday(&tv,NULL); long te = tv.tv_sec * 1000 + tv.tv_usec / 1000; //output the time of the running. cout<<endl<< endl<< "running tmie is : " << te - ts << endl; return 0; }

 

posted @ 2018-01-14 14:18  HisonSanDiego  阅读(128)  评论(0编辑  收藏  举报