We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
题目描述:
给出一个以头节点 head 作为第一个节点的链表。链表中的节点分别编号为:node_1, node_2, node_3, ... 。
每个节点都可能有下一个更大值(next larger value):对于 node_i,如果其 next_larger(node_i) 是 node_j.val,那么就有 j > i 且 node_j.val > node_i.val,而 j 是可能的选项中最小的那个。如果不存在这样的 j,那么下一个更大值为 0 。
返回整数答案数组 answer,其中 answer[i] = next_larger(node_{i+1}) 。
注意:在下面的示例中,诸如 [2,1,5] 这样的输入(不是输出)是链表的序列化表示,其头节点的值为 2,第二个节点值为 1,第三个节点值为 5 。
示例 1:
输入:[2,1,5] 输出:[5,5,0]
示例 2:
输入:[2,7,4,3,5] 输出:[7,0,5,5,0]
示例 3:
输入:[1,7,5,1,9,2,5,1] 输出:[7,9,9,9,0,5,0,0]
提示:
对于链表中的每个节点,1 <= node.val <= 10^9 给定列表的长度在 [0, 10000] 范围内
解题思路:先遍历一遍链表,将元素的顺序逆序存进容器。然后遍历容器,栈ss的栈顶元素大于当前的元素。首先是弹栈操作:如果栈顶小于等于当前元素,则一直出栈。 如果此时栈不为空,则此元素右边第一个比他大的就是这个栈顶的元素,同时此元素要放入栈中(因为要和下一个元素即左边的再比较),然后元素继续往左移。 如果此时栈为空,则说明右边没有比他再大的元素了,则此时位置为0,同时此元素要放入栈中(因为要和下一个元素即左边的再比较),然后元素继续往左移。
C++解题:
class Solution { public: vector<int> nextLargerNodes(ListNode* head) { vector<int> nodeArray; vector<int> result; stack<int> ss; while (head) { nodeArray.push_back(head->val); head = head->next; } while (!nodeArray.empty()) { if (ss.empty()) { result.push_back(0); ss.push(nodeArray.back()); nodeArray.pop_back(); }else{ while (!ss.empty() && ss.top() <= nodeArray.back()) ss.pop(); if(!ss.empty()){ result.push_back(ss.top()); ss.push(nodeArray.back()); nodeArray.pop_back(); } } } vector<int> result_res; while (!result.empty()) { result_res.push_back(result.back()); result.pop_back(); } return result_res; } };
The text was updated successfully, but these errors were encountered:
No branches or pull requests
题目描述:
给出一个以头节点 head 作为第一个节点的链表。链表中的节点分别编号为:node_1, node_2, node_3, ... 。
每个节点都可能有下一个更大值(next larger value):对于 node_i,如果其 next_larger(node_i) 是 node_j.val,那么就有 j > i 且 node_j.val > node_i.val,而 j 是可能的选项中最小的那个。如果不存在这样的 j,那么下一个更大值为 0 。
返回整数答案数组 answer,其中 answer[i] = next_larger(node_{i+1}) 。
注意:在下面的示例中,诸如 [2,1,5] 这样的输入(不是输出)是链表的序列化表示,其头节点的值为 2,第二个节点值为 1,第三个节点值为 5 。
示例 1:
示例 2:
示例 3:
提示:
解题思路:先遍历一遍链表,将元素的顺序逆序存进容器。然后遍历容器,栈ss的栈顶元素大于当前的元素。首先是弹栈操作:如果栈顶小于等于当前元素,则一直出栈。
如果此时栈不为空,则此元素右边第一个比他大的就是这个栈顶的元素,同时此元素要放入栈中(因为要和下一个元素即左边的再比较),然后元素继续往左移。
如果此时栈为空,则说明右边没有比他再大的元素了,则此时位置为0,同时此元素要放入栈中(因为要和下一个元素即左边的再比较),然后元素继续往左移。
C++解题:
The text was updated successfully, but these errors were encountered: