1、在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1 class Solution {
2 public:
3 bool Find(int target, vector<vector<int> > array) {
4
5 int row = (int)array.size();
6 int col = (int)array[0].size();
7 if (row == 0 || col == 0)
8 return false;
9 if (target < array[0][0] || target > array[row - 1][col - 1])
10 return false;
11 int i = row - 1;
12 int j = 0;
13 while (i >=0 && j <col)
14 {
15 if (array[i][j] > target)
16 {
17 i--;
18 }
19 else if (array[i][j] < target)
20 {
21 j++;
22 }
23
24 else
25
26 return true;
27
28 }
29 return false;
30 }
31 };
2、请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
1 class Solution {
2
3 public:
4 void replaceSpace(char *str,int length) {
5 int i=length-1,j,count=0;
6 while(i>=0){
7 if(str[i]==' '){
8 for(j=length;j>=i;j--){
9 str[j+2]=str[j];
10 }
11 str[i]='%';
12 str[i+1]='2';
13 str[i+2]='0';
14 length+=2;
15 }
16 i--;
17 }
18 }
19
20
21 };
3、输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
1 class Solution {
2 public:
3 vector<int> printListFromTailToHead(ListNode* head) {
4 vector <int> result;
5 stack<int> arr;
6 ListNode* p=head;
7 while(p!=NULL)
8 {
9 arr.push(p->val);
10 p=p->next;
11 }
12 int len=arr.size();
13 for(int i=0;i<len;i++)
14 {
15 result.push_back(arr.top());
16 arr.pop();
17 }
18 return result;
19
20
21 }
22 };
4、输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
1 class Solution {
2 public:
3 TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
4 int s = vin.size();
5 if(s==0)
6 return NULL;
7 vector<int> pre_left,pre_right,vin_left,vin_right;
8 TreeNode* node = new TreeNode(pre[0]);
9 int index = 0;
10 for(int i=0;i<s;i++){
11 if(vin[i]==pre[0]){
12 index = i;
13 break;
14 }
15 }
16 for(int i=0;i<index;i++){
17 pre_left.push_back(pre[i+1]);
18 vin_left.push_back(vin[i]);
19 }
20 for(int i=0;i<s-index-1;i++){
21 pre_right.push_back(pre[i+index+1]);
22 vin_right.push_back(vin[i+index+1]);
23 }
24
25
26 /**for(int i = 0; i < s; ++i){
27 if(i < index){
28 vin_left.push_back(vin[i]);//Construct the left pre and in
29 pre_left.push_back(pre[i+1]);
30 }
31 else if(i > index){
32 vin_right.push_back(vin[i]);//Construct the right pre and in
33 pre_right.push_back(pre[i]);
34 }
35 }*/
36 node->left = reConstructBinaryTree(pre_left,vin_left);
37 node->right = reConstructBinaryTree(pre_right,vin_right);
38 return node;
39
40 }
41 };
来源:https://www.cnblogs.com/yksgzlyh/p/10665561.html