剑指offer 算法(数组 字符串)
生活随笔
收集整理的這篇文章主要介紹了
剑指offer 算法(数组 字符串)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
請實現一個函數,將一個字符串中的空格替換成“%20”。例如,當字符串為We Are Happy.則經過替換之后的字符串為We%20Are%20Happy。
補充:坑爹的題目也不指明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”替換,直到串首
總結
以上是生活随笔為你收集整理的剑指offer 算法(数组 字符串)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offer 算法 (递归与循环)
- 下一篇: 剑指offer 算法(链表 树)