渣基础:比照Hawstein学Cracking the coding interview(2)
2014-10-10 14:12
399 查看
作者:Hawstein
出处:http://hawstein.com/posts/1.4.html
声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。
Q1.4 写一个函数判断两个字符串是否是变位词。
变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词。比如说,
abbcd和abcdb就是一对变位词。
方法一:是用STL里的sort方法,那么时间复杂度就是O(nlogn)时间排序,O(n)的时间来比较是否相等。其中字符串的是否相等,可调用s.compare(t),若相等,则为0.
方法二:统计每个字符串里各个字符出现的字数,然后判断字符出现次数是否相同。作者开了一个256的整数数组,遍历第一个字符串时,将相应的字符数次数加1;遍历第二个字符串时,将相应字符出现的字数减一,要是最后每个数都为0,就说明是一堆变位词。
Q1.5 写一个函数,把字符串中所有的空格替换为%20
。
我的方法跟他的一样,不过在取c[]时候,用的是记录空格数,然后:
他写的是:
感觉比我写的要好一点。。。他还有一种情况写的是原串空间足够大,则直接在原串上从后向前改。
Q1.6
一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度。 你能原地进行操作吗?(即不开辟额外的存储空间)
作者的方法采用的是先对角线处理,然后再上下翻转,也就是分两次。
这里我自己写的时候碰到的问题:
1.没想到分两步来旋转矩阵,感觉难解。通式是
2.在循环次数上出错,倒置最后矩阵不变了。。。要注意循环的次数。
PS:在这题上 作者的方法有点小问题,就在于它函数的形参是a[][4],通用性上并不好,因此我查了另外一种方法:
转载自:http://blog.csdn.net/sunnyyoona/article/details/18566587
void RotateImage(vector<vector<int> > &matrix)
这么写的话,就可以通过n=matrix.size() 来判断矩阵大小,当然在初始化的时候 就需要用push_back了。
出处:http://hawstein.com/posts/1.4.html
声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。
Q1.4 写一个函数判断两个字符串是否是变位词。
变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词。比如说,
abbcd和abcdb就是一对变位词。
方法一:是用STL里的sort方法,那么时间复杂度就是O(nlogn)时间排序,O(n)的时间来比较是否相等。其中字符串的是否相等,可调用s.compare(t),若相等,则为0.
方法二:统计每个字符串里各个字符出现的字数,然后判断字符出现次数是否相同。作者开了一个256的整数数组,遍历第一个字符串时,将相应的字符数次数加1;遍历第二个字符串时,将相应字符出现的字数减一,要是最后每个数都为0,就说明是一堆变位词。
Q1.5 写一个函数,把字符串中所有的空格替换为%20
。
我的方法跟他的一样,不过在取c[]时候,用的是记录空格数,然后:
<span style="white-space:pre"> </span>for(int i=0;i<len;i++) { if(s[i]==' ') { c[i+2*p]='%'; c[i+2*p+1]='2'; c[i+2*p+2]='0'; p++; } else c[2*p+i]=s[i]; }
他写的是:
<span style="white-space:pre"> </span>for(int i=0; i<len; ++i) { if(c[i] == ' ') { cc[p] = '%'; cc[p+1] = '2'; cc[p+2] = '0'; p += 3; } else { cc[p] = c[i]; ++p; } }
感觉比我写的要好一点。。。他还有一种情况写的是原串空间足够大,则直接在原串上从后向前改。
Q1.6
一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度。 你能原地进行操作吗?(即不开辟额外的存储空间)
作者的方法采用的是先对角线处理,然后再上下翻转,也就是分两次。
这里我自己写的时候碰到的问题:
1.没想到分两步来旋转矩阵,感觉难解。通式是
2.在循环次数上出错,倒置最后矩阵不变了。。。要注意循环的次数。
PS:在这题上 作者的方法有点小问题,就在于它函数的形参是a[][4],通用性上并不好,因此我查了另外一种方法:
转载自:http://blog.csdn.net/sunnyyoona/article/details/18566587
void RotateImage(vector<vector<int> > &matrix)
这么写的话,就可以通过n=matrix.size() 来判断矩阵大小,当然在初始化的时候 就需要用push_back了。
vector<int> row1 = {1,2,3}; vector<int> row2 = {4,5,6}; vector<int> row3 = {7,8,9}; vector<vector<int>> matrix; matrix.push_back(row1); matrix.push_back(row2); matrix.push_back(row3);
相关文章推荐
- 渣基础:比照Hawstein学Cracking the coding interview(4)
- 渣基础:比照Hawstein学Cracking the coding interview(1)
- 渣基础:比照Hawstein学Cracking the coding interview(3)
- Cracking the Coding Interview-ch11 | System Design and Memory Limits
- 二维数组中的查找 Cracking the coding interview 9.6
- cracking the coding interview problem solution 1.8
- Cracking the coding interview--问题与解答
- Cracking The Coding Interview 5th 完整版
- Cracking the coding interview--Q1.5
- Cracking the coding interview--Q1.1
- cracking the coding interview problem solution 1.3
- Cracking the coding interview--Q9.3
- Cracking the coding interview--Q1.1
- Cracking the coding interview--Q1.6
- Cracking the coding interview--Q1.7
- cracking the coding interview problem solution 1.5
- Cracking the Coding Interview – ch16,17,18
- Cracking the Coding Interview(1)
- Cracking the Coding Interview
- 《Cracking the coding interview》