Files
leetcode-master/problems/0503.下一个更大元素II.md
youngyangyang04 00356b6481 Update
2020-10-22 09:15:34 +08:00

1.6 KiB

链接

https://leetcode-cn.com/problems/next-greater-element-ii/

思路

可以把两个数组拼接在一起

代码性能不行啊,得找找优化的方式

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        vector<int> nums1(nums.begin(), nums.end());
        nums.insert(nums.end(), nums1.begin(), nums1.end());
        vector<int> result(nums.size(), -1);
        if (nums.size() == 0) return result;
        stack<int> st;
        st.push(0);
        for (int i = 0; i < nums.size(); i++) {
            while (!st.empty() && nums[i] > nums[st.top()]) {
                result[st.top()] = nums[i];
                st.pop();
            }
            st.push(i);
        }
        result.resize(nums.size() / 2);
        return result;
    }
};

这样好像能高一些

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        vector<int> nums1(nums.begin(), nums.end());
        nums.resize(nums.size() * 2);
        int h = nums.size() / 2;
        for (int i = 0; i < nums.size() / 2; i++) {
            nums[h + i] = nums[i];
        }
        //nums.insert(nums.end(), nums1.begin(), nums1.end());
        vector<int> result(nums.size(), -1);
        if (nums.size() == 0) return result;
        stack<int> st;
        st.push(0);
        for (int i = 0; i < nums.size(); i++) {
            while (!st.empty() && nums[i] > nums[st.top()]) {
                result[st.top()] = nums[i];
                st.pop();
            }
            st.push(i);
        }
        result.resize(nums.size() / 2);
        return result;
    }
};