剑指offer 算法(数组 字符串)
2015-08-15 19:28
267 查看
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解析:解题思路:从二维数组的右上角的元素开始判断,因为此元素是它所在行的最大数,是它所在的列的最小数。如果它等于要查找的数字,则查找过程结束。如果它大于要查找的数字,则可以排除它所在的列。如果它小于要查找的数字,则可排除它所在的行。这样如果要查找的数字不在数组的右上角,则每次判断都可以排除一行或一列以缩小查找范围,直到找到要查找的数字,或者查找范围为空。
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解析:逐个判断,当存在空格,截断字符串,分为空格前和空格后,之后连接“空格前串”+“%20”+“空格后串”,赋予原串。
补充:坑爹的题目也不指明length是原str串最大长度~~还有,有点疑惑,我的这种办法当遇到连续两个空格是能成功替换,但最后会报错,why?why?why?在VC++6.0会出问题,codeblocks就没问题。。。string库的问题吗,因为codeblocks用的是cstring~~~看别人的办法,都是先数空格个数,再补充str长度,之后从后往前复制,当遇到空格就用“%20”替换,直到串首
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解析:解题思路:从二维数组的右上角的元素开始判断,因为此元素是它所在行的最大数,是它所在的列的最小数。如果它等于要查找的数字,则查找过程结束。如果它大于要查找的数字,则可以排除它所在的列。如果它小于要查找的数字,则可排除它所在的行。这样如果要查找的数字不在数组的右上角,则每次判断都可以排除一行或一列以缩小查找范围,直到找到要查找的数字,或者查找范围为空。
class Solution { public: bool Find(vector<vector<int> > array,int target) { if(array.empty()) return false; int row=array.size(); int col=array[0].size(); int i=0,j=0; //if(target<array[0][0]||target>array[row-1][col-1]) // return false; //else //{ i=0;j=col-1; while(i<row&&j>=0) { if(array[i][j]==target) return true; else if(target<array[i][j]) { j--; } else { i++; } } return false; //} } };题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解析:逐个判断,当存在空格,截断字符串,分为空格前和空格后,之后连接“空格前串”+“%20”+“空格后串”,赋予原串。
class Solution { public: void replaceSpace(char *str,int length) { int length1=strlen(str); char space[]=" "; char cat[]="%20"; char *temp; int length2; char final[256]; while(strstr(str,space)!=NULL) { temp=strstr(str,space); length2=strlen(temp); memcpy(&final,str,(length1-length2)); final[(length1-length2)]='\0'; strcat(final,cat); strcpy(temp,(temp+1)); temp[length2]='\0'; strcat(final,temp); strcpy(str,final); length1=length1+2;; } //cout<<str<<endl; } };
补充:坑爹的题目也不指明length是原str串最大长度~~还有,有点疑惑,我的这种办法当遇到连续两个空格是能成功替换,但最后会报错,why?why?why?在VC++6.0会出问题,codeblocks就没问题。。。string库的问题吗,因为codeblocks用的是cstring~~~看别人的办法,都是先数空格个数,再补充str长度,之后从后往前复制,当遇到空格就用“%20”替换,直到串首
相关文章推荐
- JS学习十五天----设计模式开篇
- Html<a>标签href的困惑记载
- 不是技术牛人,如何拿到国内IT巨头的Offer
- 【J2SE】这才是java虚引用(PhantomReference)
- 萧墙HTML5手机发展之路(51)——jquerymobile在提高页面访问速度
- html5 说明
- HTML全局属性
- [Leetcode] Populating Next Right Pointers in Each Node I,II
- jquery 元素控制(追加元素/追加内容)介绍及应用
- 【学习Egret】第一个H5小游戏,人人来打产品汪
- html中单元格间距与单元格边距的区别
- LeetCode - Populating Next Right Pointers in Each Node II 及其变形题
- jquery proxy整理
- 基于Html5缓存的页面P2P技术可行性探讨
- ajax 请求数据的两种方法
- JSON数据解析
- 解决编译opencv3.0时出现的问题undefined reference to `parallel_pthreads_set_threads_num(int)'
- 文件管理与XMl、JSON解析
- nodejs使用md5带秘钥加密
- 2031-9百度技术沙龙:Clouda与nodejs