File tree Expand file tree Collapse file tree 5 files changed +160
-0
lines changed Expand file tree Collapse file tree 5 files changed +160
-0
lines changed Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments