Day24: [LeetCode中等] 1019. 鏈表中的下一個更大節點

Day24: [LeetCode中等] 1019. 鏈表中的下一個更大節點

題源:

來自leetcode題庫:

https://leetcode-cn.com/problems/next-greater-node-in-linked-list/

思路:

我是先把鏈表轉存在數組中,然後逆序遍歷,用數組xiabiao來儲存下一個更大值的數組下標,若沒有就是-1。逆序遍歷的時候,比較和下一個的值的大小,若小於,則更改下就好;若大於或等於,則要按照xiabiao數組來和下一個更大值對比。
其實這道題應該用棧的,用棧效率更高。

代碼:

dirty code湊合看吧

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> nextLargerNodes(ListNode* head) {
        if(!head){
            return vector<int>(0);
        }else if(head->next==NULL){
            return vector<int>(1,0);
            
        } 
        auto p=head;
        vector<int> res;
        while(p){
            res.push_back(p->val);
            p=p->next;
        }
        int Len=res.size()-1;
        vector<int> res2=res,xiabiao(Len+1,-1);
        res2[Len]=0;
        for(int i=Len-1;i>=0;i--){
            if(res[i]<res[i+1]){
                res2[i]=res[i+1];
                xiabiao[i]=i+1;
            }else{
                if(res2[i+1]==0) {
                    res2[i]=0;continue;
                } 
                int j;
                for(j=xiabiao[i+1];j!=-1;j=xiabiao[j]){
                    if(res[i]<res[j]){
                        res2[i]=res[j];
                        xiabiao[i]=j;
                        break;
                    }
                }
                if(j==-1) res2[i]=0;
            }
        }
        return res2;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章