LeetCode 2016 332,127,25,23,143,114

来源:互联网 发布:js 时间转换 编辑:程序博客网 时间:2024/06/05 08:11

332 Reconstruct Itinerary

class Solution {public:    bool sign;    vector<string> ans;    vector<string> anstmp;    int n;    int ntickets;    vector<vector<int> >used;    vector<vector<int> > road;    map<string, int> relation;    map<int,string> itosrelation;    vector<string> findItinerary(vector<pair<string, string> > tickets)    {        sign = false;        ntickets = tickets.size();        string bgword = "JFK";        ans.clear();        anstmp.clear();        set<string> flag;        relation.clear();        itosrelation.clear();        vector<string> names;        road.clear();        names.clear();        flag.clear();        used.clear();        for(int i=0;i<ntickets;i++)        {            string sf = tickets[i].first;            string ss = tickets[i].second;            if (flag.find(sf)==flag.end())            {                flag.insert(sf);                names.push_back(sf);            }            if (flag.find(ss)==flag.end())            {                flag.insert(ss);                names.push_back(ss);            }        }        n=names.size();        vector<vector<int> > f(n+1,vector<int>(n+1,0));        used=f;        road.resize(n+5);        sort(names.begin(),names.end());        //for(int j=0;j<names.size();j++)        //    cout<<names[j]<<endl;        //cout<<"----------------"<<endl;        for(int i=0;i<n;i++)        {            relation[names[i]]=i;            itosrelation[i]=names[i];        }        for(int i=0;i<ntickets;i++)        {            string sf = tickets[i].first;            string ss = tickets[i].second;            road[relation[sf]].push_back(relation[ss]);            used[relation[sf]][relation[ss]]++;        }        for(int i=0;i<n;i++)        {            sort(road[i].begin(),road[i].end());            //cout<<"-----------"<<itosrelation[i]<<"-----------"<<endl;            //for(int j=0;j<road[i].size();j++)            //    cout<<itosrelation[road[i][j]]<<endl;        }        int bgnums = relation[bgword];        anstmp.push_back(bgword);        depthSearch(bgnums,1);        return ans;    }    void depthSearch(int x,int k)    {        if(sign) return;        for(int i=0;i<road[x].size();i++)        {            if (used[x][road[x][i]]>0)            {                //cout<<itosrelation[road[x][i]]<<endl;                anstmp.push_back(itosrelation[road[x][i]]);                used[x][road[x][i]]--;                //cout<<"k = "<<k<<"   ntickets = "<<ntickets<<endl;                if (k==ntickets)                {                    ans=anstmp;                    //cout<<"yes"<<endl;                    sign = true;                    return ;                }                depthSearch(road[x][i],k+1);                used[x][road[x][i]]++;                anstmp.pop_back();            }        }        return ;    }};

127 Word Ladder

class Solution {public:    int ladderLength(string beginWord, string endWord, unordered_set<string>& wordList)    {        set<string> dic;        set<string> tmpdic;        dic.clear();        queue<pair<string,int> > q;        while(!q.empty()) q.pop();        for(unordered_set<string>::iterator i = wordList.begin();i!=wordList.end();i++)        {            dic.insert(*i);        }        q.push(make_pair(beginWord,1));        int len = (q.front()).first.size();        //cout<<q.front().first<<endl;        while(!q.empty())        {            string cur = q.front().first;            //cout<<"cur = "<<cur<<endl;            int lev = q.front().second;            //cout<<"lev = "<<lev<<endl;            if (cur == endWord)  return lev;            q.pop();            tmpdic.clear();            for(set<string>::iterator i = dic.begin();i!=dic.end();i++)            {                //if (dic[d]==0) continue;                string d = (*i);                int cnt = 0;                for(int j=0;j<len;j++)                {                    if (cur[j]!=d[j]) cnt++;                    if (cnt>1)break;                }                if (cnt==1)                {                    tmpdic.insert(d);                    //cout<<"d = "<<d<<endl;                    q.push(make_pair(d,lev+1));                }            }            for(set<string>::iterator i = tmpdic.begin();i!=tmpdic.end();i++)            {                dic.erase(*i);            }        }        return 0;    }};

25 Reverse Nodes in k-Group

class Solution {public:    ListNode* reverseKGroup(ListNode* head, int k)    {        if (head == NULL) return head;        ListNode* first = new ListNode(0);        first->next = head;        ListNode* p = first;        ListNode* tmp;        ListNode* last = first;        int cnt = 0;        vector<ListNode*> trace;        trace.clear();        while(p->next != NULL)        {            p=p->next;            cnt++;            trace.push_back(p);            if (cnt == k)            {                last->next = trace[k-1];                trace[0]->next = p->next;                for(int i=k-1;i>0;i--)                {                    trace[i]->next = trace[i-1];                }                last =trace[0];                p=trace[0];                trace.clear();                cnt=0;            }        }        return first->next;    }};


23 Merge k Sorted Lists

class Solution {public:    set<ListNode*> head;    ListNode* ans;    ListNode* mergeKLists(vector<ListNode*>& lists)    {        ListNode* tmpans = new ListNode(0);        ans = tmpans;        ListNode* res = tmpans;        vector<ListNode*> special;        special.clear();        int len = lists.size();        if (len == 0) return NULL;        for(int i=0;i<len;i++)        {            if (lists[i]==NULL) continue;            if (lists[i]->next == NULL)            {                special.push_back(lists[i]);                continue;            }            if (lists[i]!=NULL)                head.insert(lists[i]);        }        int ls = special.size();        if (ls != 0)        {            dealWithSpecial(special);        }        while (!head.empty())        {            if (head.size()==1)            {                set<ListNode*>::iterator p = head.begin();                ans->next = (*p);                break;            }            findMin();        }        return res->next;    }    static bool cmp(ListNode* x,ListNode* y)    {        return (x->val < y->val);    }    void dealWithSpecial(vector<ListNode*> sp)    {        int ls = sp.size();        sort(sp.begin(),sp.end(),cmp);        ls--;        for(int i=0;i<ls;i++)        {            sp[i]->next = sp[i+1];        }        head.insert(sp[0]);    }    void findMin()    {        int m = INT_MAX;        ListNode *p, *mPointer;        //cout<<"-----------findMin()---------"<<endl;        for(set<ListNode*>::iterator i = head.begin();i!=head.end();i++)        {            p=(*i);            if (p->val < m)            {                m=p->val;                mPointer = p;                //cout<<"min m = "<<m<<endl;            }        }        ans->next = mPointer;        ans = ans->next;        if (mPointer->next != NULL)head.insert(mPointer->next);        head.erase(mPointer);    }};


143 Reorder List

class Solution {public:    void reorderList(ListNode* head)    {        if (head ==NULL) return ;        vector<ListNode*> re;        re.clear();        int n = 0;        ListNode *p = head;        while(p!=NULL)        {            re.push_back(p);            n++;            p=p->next;        }        int m = n/2;        int tn = n-1;        re.push_back(NULL);        for(int i=0;i<m;i++)        {            re[i]->next = re[tn-i];            re[tn-i]->next = re[i+1];        }        re[m]->next =NULL;        return ;    }};

114 Flatten Binary Tree to Linked List

class Solution{public:    TreeNode* leftmost;    void flatten(TreeNode* root)    {        if (root==NULL) return ;        if (root->left)        {            flatten(root->left);            leftmost->right = root->right;            root->right = root->left;            root->left = NULL;        }        leftmost = root;        flatten(root->right);    }};






0 0
原创粉丝点击