剑指offer在线编程题汇总与讲解(part 1)
2015-09-14 20:25
399 查看
1.二维数组中的查找
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
1.代码要求使用vector来保存二维数组的,那么我们首先应该熟悉如何用vector来表示行以及列;
2.解题思路有多种,比如我们可以从左下角或者右上角开始扫描整个数组,为什么?从题目可以知道,从上到下,是递增的;从左到右也是递增的。假设我们从左下角开始遍历,如果他大于这个数值,可以排除他所在的行;如果他小于的话,可以排除他所在的列。那我们每次判断就可以缩小一行或者一列的范围,直到找到这个数字。
3.我是以右上角开始遍历的,小伙伴们可以试一下左下角的遍历方法~~~
C++代码:
class Solution { public: bool Find(vector<vector<int> > array,int target) { int rows = array.size(); int columns = array[0].size(); int i=0; int j=columns-1; while(i<rows && j>=0){ if(target == array[i][j]){ return true; } if(target>array[i][j]){ i++; continue; } if(target<array[i][j]){ j--; continue; } } return false; } };
2.替换空格
题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are
Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路:
1.遍历整个字符串,统计空格出现的次数
2.因为所要替换的字符串为'%20',把字符串看成是一个数组,那么‘%20’是需要占3位的,所以们应该算出替换后的字符串的长度=原来的字符串长度+空格数*2;
3.在我们统计空格数的时候是从左到右统计的,而填充字符时就应该变成从右向左。
4.Ps.其实C++有一个库函数replaceAll(),他具有两个参数(‘被替换的字符’,‘想要替换的字符’),但用的时候一定要保证位置留够,不要塞不下~~
class Solution { public: void replaceSpace(char *str,int length) { int newlength=0; int space_num=0; for(int i=0;i<length;i++){ if(str[i]==' '){ space_num++; } } newlength = length + space_num*2; int m = newlength-1; for(int num=length-1;num>=0;num--){ if(str[num]==' '){ str[m--]='0'; str[m--]='2'; str[m--]='%'; }else{ str[m--]=str[num]; } } } };
3.从尾到头打印链表
题目描述:输入一个链表,从尾到头打印链表每个节点的值。
解题思路:
可以提供两种方法:
1.先遍历一遍链表,记录链表的长度;再根据长度重新开辟一个数组,再从后往前遍历一遍链表,将链表值放入数组中打印出来就可以了。
2.想一下,从尾到头首先是不是可以想到栈?先进后出的原则,我们可以将扫描到的链表值放入栈中,然后直接取出就可以了。
<span style="font-size:14px;">/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x), next(NULL) { * } * }; */ class Solution { public: vector<int> printListFromTailToHead(struct ListNode* head) { std::stack<ListNode*>stk; vector<int>value; ListNode* p=head; while(p!=NULL){ stk.push(p); p=p->next; } ListNode* ps; while(!stk.empty()){ p = stk.top(); value.push_back(p->val); stk.pop(); } return value; } };</span>
相关文章推荐
- angular学习日志02
- 前端优化
- js匿名函数
- jsoncpp简单示例
- 解析JSON格式数据
- 前端学习资料
- Struct 基本原理
- 使用FileReader类、BufferedReader类、FileInputStream类三种方式输出
- web前端优化--DOM性能优化
- Retrofit中使用GSON解析定制格式的JSON
- webapi ,前台json传入raw读取
- JSON 序列化 和 JSON 反序列化
- bzoj1032 [JSOI2007]祖码Zuma
- react router 学习总结
- JS中复制数组
- Wow6432Node
- JSP 四个内置对象的保存范围
- JSP 响应对象 response
- js校验15位/18位身份证件号(地区、生日、性别)
- JSP 对话对象 Session