Skip to content

Commit 081a042

Browse files
committed
5 problems solved.
1 parent 408c730 commit 081a042

File tree

5 files changed

+160
-0
lines changed

5 files changed

+160
-0
lines changed

src/155.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
class MinStack {
2+
public:
3+
/** initialize your data structure here. */
4+
MinStack() {
5+
len = 0;
6+
}
7+
8+
void push(int x) {
9+
st.push_back(x);
10+
++len;
11+
if (len == 1)
12+
minval = x;
13+
else
14+
minval = x < minval ? x : minval;
15+
}
16+
17+
void pop() {
18+
if (len > 0)
19+
{
20+
--len;
21+
st.erase(--st.end());
22+
if (len > 0)
23+
{
24+
auto lim = st.end();
25+
int t = *st.begin();
26+
for (auto iter = st.begin(); iter != lim; ++iter)
27+
if (*iter < t)
28+
t = *iter;
29+
minval = t;
30+
}
31+
}
32+
}
33+
34+
int top() {
35+
if (len > 0)
36+
return st.back();
37+
else
38+
return 0;
39+
}
40+
41+
int getMin() {
42+
if (len > 0)
43+
return minval;
44+
else
45+
return 0;
46+
}
47+
48+
list<int> st;
49+
int minval;
50+
int len;
51+
};

src/31.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
void nextPermutation(vector<int>& nums) {
2+
int len = nums.size();
3+
if (len <= 1)
4+
return;
5+
if (len == 2)
6+
swap(nums[0], nums[1]);
7+
else
8+
{
9+
int i = len - 1;
10+
while (i > 0 && nums[i-1] >= nums[i])
11+
--i;
12+
if (i == 0)
13+
reverse(nums.begin(), nums.end());
14+
else
15+
{
16+
int j = len - 1;
17+
while (j >= i && nums[j] <= nums[i-1])
18+
--j;
19+
swap(nums[i-1], nums[j]);
20+
reverse(nums.begin()+i, nums.end());
21+
}
22+
}
23+
}

src/46.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
vector<vector<int>> permute(vector<int>& nums) {
2+
sort(nums.begin(), nums.end());
3+
int len = nums.size();
4+
long long total = 1;
5+
for (int i = len; i >= 1; --i)
6+
total *= i;
7+
vector<vector<int>> res(total, vector<int>(len, 0));
8+
res[0].assign(nums.begin(), nums.end());
9+
10+
int i = 1;
11+
while (next_permutation(nums.begin(), nums.end()))
12+
{
13+
res[i++].assign(nums.begin(), nums.end());
14+
}
15+
16+
return move(res);
17+
}

src/53.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
int maxSubArray(vector<int>& nums) {
2+
int len = nums.size();
3+
if (len == 0)
4+
return 0;
5+
if (len == 1)
6+
return nums[0];
7+
8+
int i = 1;
9+
int maxsum = nums[0];
10+
int tmp = maxsum;
11+
while (i < len)
12+
{
13+
if (tmp <= 0)
14+
{
15+
if (nums[i] >= tmp)
16+
{
17+
tmp = nums[i];
18+
if (tmp > maxsum)
19+
maxsum = tmp;
20+
}
21+
++i;
22+
}
23+
else
24+
{
25+
tmp += nums[i];
26+
if (tmp > maxsum)
27+
maxsum = tmp;
28+
++i;
29+
}
30+
}
31+
32+
if (tmp > maxsum)
33+
maxsum = tmp;
34+
35+
return maxsum;
36+
}

src/56.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
vector<vector<int>> merge(vector<vector<int>>& intervals) {
2+
int len = intervals.size();
3+
if (len <= 1)
4+
return move(intervals);
5+
6+
auto cmp = [](vector<int>& a, vector<int>& b) {
7+
return a[0] < b[0] || (a[0] == b[0] && a[1] < b[1]);
8+
};
9+
10+
sort(intervals.begin(), intervals.end(), cmp);
11+
12+
vector<vector<int>> res;
13+
int b = intervals[0][0], e = intervals[0][1];
14+
int i = 1;
15+
while (i < len)
16+
{
17+
if (intervals[i][0] > e)
18+
{
19+
res.push_back({b, e});
20+
b = intervals[i][0];
21+
e = intervals[i][1];
22+
++i;
23+
}
24+
else
25+
{
26+
e = intervals[i][1] > e ? intervals[i][1] : e;
27+
++i;
28+
}
29+
}
30+
res.push_back({b, e});
31+
32+
return move(res);
33+
}

0 commit comments

Comments
 (0)