Skip to content

Commit

Permalink
下一个更大元素系列
Browse files Browse the repository at this point in the history
  • Loading branch information
yanjinbin committed Dec 29, 2020
1 parent 8470623 commit 7aa9c7a
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 0 deletions.
27 changes: 27 additions & 0 deletions Leetcode/L496.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#include <iostream>
#include <map>
#include <stack>
#include <vector>
using namespace std;

class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
vector<int> ans;
stack<int> s;
map<int, int> m;
for (int i = 0; i < nums2.size(); i++) {
while (!s.empty() && s.top() < nums2[i]) {
m[s.top()] = nums2[i];
s.pop();
}
s.push(nums2[i]);
}
for (int i = 0; i < nums1.size(); i++) {
ans.emplace_back(m.count(nums1[i]) ? m[nums1[i]] : -1);
}
return ans;
}
};

int main() { return 0; }
24 changes: 24 additions & 0 deletions Leetcode/L503.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#include <iostream>
#include <map>
#include <stack>
#include <vector>
using namespace std;

class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int len = nums.size();
stack<int> s;
vector<int> ans(len, -1);
for (int i = 0; i < 2 * len; i++) {
while (!s.empty() && nums[s.top()] < nums[i % len]) {
ans[s.top()] = nums[i % len];
s.pop();
}
s.push(i % len);
}
return ans;
}
};

int main() { return 0; }
40 changes: 40 additions & 0 deletions Leetcode/L556.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#include <iostream>
#include <map>
#include <stack>
#include <vector>
using namespace std;

class Solution {
public:
int nextGreaterElement(int n) {
if (n == 0 || n > INT_MAX) return -1;
vector<int> digits;
while (n > 0) {
digits.push_back(n % 10);
n = n / 10;
}
int i = 1;
while (i < digits.size() && digits[i] >= digits[i - 1])
i++; // 从右往左,找到第一个不是递增的位数
if (i == digits.size()) return -1;
int j = 0;
while (digits[j] <= digits[i]) j++;
swap(digits[i], digits[j]);
sort(digits.begin(), digits.begin() + i);
reverse(digits.begin(), digits.begin() + i);
long ret = 0;
for (int k = digits.size() - 1; k >= 0; k--) {
ret = ret * 10 + digits[k];
}
if (ret > INT_MAX)
return -1;
else
return ret;
}
};
// https://youtu.be/OKNpknDO86U
int main() {
Solution INSTANCE;
cout << INSTANCE.nextGreaterElement(37986251) << endl;
return 0;
}

0 comments on commit 7aa9c7a

Please sign in to comment.