1
- #include < cctype>
2
- #include < string>
3
1
#include < iostream>
4
- #include < utility>
5
2
#include < vector>
6
- #include < set>
7
- #include < map>
8
- #include < utility> // for std::forward()
9
- #include < memory>
10
- #include < functional>
11
- #include < algorithm>
12
- #include < sstream>
13
- #include < atomic>
14
- #include < iostream>
15
- #include < unistd.h>
16
- #include < cerrno>
17
- #include < cstring>
18
- #include < condition_variable>
19
- #include < algorithm>
20
- #include < unordered_map>
21
- #include < list>
3
+ #include < numeric>
4
+ #include < limits>
5
+ #include < vector>
6
+ #include < stack>
7
+ #include < string>
8
+ #include < cctype>
22
9
23
10
using namespace std ;
24
11
25
- // 算法复杂度 O(logn)
26
- // 2. 查询原有数组下标
27
-
28
-
29
-
30
12
class Solution {
31
13
public:
32
- // nums 是旋转之后的数组
33
- int search (vector<int >& nums, int target) {
34
- // 异常情况
35
- // 1. 数组为空, 2. ?
36
- if (nums.empty ()) {
37
- return -1 ;
38
- }
39
14
40
-
41
- // 2. 定位target O(logn) 算法要求,需要使用二分查找
42
- int left = 0 ;
43
- int right = nums.size () - 1 ;
44
- // 先查看中间值
45
- int middle = 0 ;
46
- while (left < right) {
47
- // 每次循环需要重新定位中间值
48
- middle = (left + right) / 2 ;
49
-
50
- //
51
- if (nums[middle] == target) {
52
- return middle;
53
- }
54
-
55
-
56
-
57
- // 其他情况
58
-
59
- if (nums[left] <= nums[middle]) {
60
- if (target < nums[middle]) {
61
- right = middle ;
62
- }
63
- else {
64
- left = middle;
15
+ /* Write Code Here */
16
+ int calculate (vector < string > tokens) {
17
+ std::stack<int > stack;
18
+
19
+
20
+
21
+ for (const auto & token : tokens) {
22
+
23
+ std::cout << " =======" << token[0 ] << std::endl;
24
+ // 正数或者负数两种情况
25
+ if (isdigit (token[0 ]) || (token.size () > 1 && isdigit (token[1 ]))) {
26
+
27
+ stack.push (std::stoi (token));
28
+ } else {
29
+ std::cout << " ------" << std::endl;
30
+ int rOp = stack.top ();
31
+ stack.pop ();
32
+ int lOp = stack.top ();
33
+ stack.pop ();
34
+
35
+ switch (token[0 ]) {
36
+ case ' +' :
37
+ stack.push (rOp + lOp);
38
+ break ;
39
+ case ' -' :
40
+ stack.push (rOp - lOp);
41
+ break ;
42
+ case ' *' :
43
+ stack.push (rOp * lOp);
44
+ break ;
45
+ case ' /' :
46
+ stack.push (rOp / lOp);
47
+ break ;
48
+ default :
49
+ std::cerr << " Unexpected error" << std::endl;
65
50
}
66
51
}
67
- // 小于是乱序,大于是有序之后的后半段
68
- if (nums[right] )
69
-
70
52
}
71
-
72
-
73
-
74
-
75
-
76
-
77
- return -1 ;
53
+ return stack.top ();
78
54
}
79
55
};
80
56
81
-
82
-
83
-
84
57
int main () {
58
+ int res;
59
+
60
+ int tokens_size = 0 ;
61
+ cin >> tokens_size;
62
+ vector<string> tokens;
63
+ string tokens_item;
64
+ for (int tokens_i=0 ; tokens_i<tokens_size; tokens_i++) {
65
+ getline (cin, tokens_item);
66
+ tokens.push_back (tokens_item);
67
+ }
68
+ for (const auto & token : tokens) {
69
+ std::cout << " ======" << token << std::endl;
70
+ }
85
71
86
- Solution solution;
87
-
88
- std::vector<int > num{4 ,5 ,6 ,7 ,0 ,1 ,2 };
89
-
90
-
91
- std::cout << solution.search (num, 0 ) << std::endl;
92
-
93
-
94
-
95
-
72
+ Solution *s = new Solution ();
73
+ res = s->calculate (tokens);
74
+ cout << res << endl;
96
75
97
76
return 0 ;
98
- }
77
+
78
+ }
0 commit comments