crack the coding interview
crack the coding interview
1.1
- #ifndef __Question_1_1_h__
- #define __Question_1_1_h__
- #include <string>
- using std::string;
- class Question1_1
- {
- public:
- int run();
- bool isUniqueChars(const string& str);
- bool isUniqueChars2(const string& str);
- string result(bool value);
- };
- #endif // __Question_1_1_h__
- #include<iostream>
- #include<string>
- #include "Question1_1.h"
- using namespace std;
- bool Question1_1::isUniqueChars(const string& str)
- {
- if (str.length() > 256)
- {
- return false;
- }
- unsigned int checker = 0;
- for (int i = 0; i < str.length(); ++i)
- {
- int value = str[i] - 'a';
- if ((checker & (1 << value)) != 0)
- {
- return false;
- }
- checker |= (1 << value);
- }
- return true;
- }
- bool Question1_1::isUniqueChars2(const string& str)
- {
- if (str.length() > 256)
- {
- return false;
- }
- bool ascii_set[256] = { false };
- for (int i = 0; i < str.length(); ++i)
- {
- int value = str[i];
- if (ascii_set[value])
- {
- return false;
- }
- ascii_set[value] = true;
- }
- return true;
- }
- /* Function to print true and false */
- string Question1_1::result(bool value)
- {
- if (value)
- {
- return "True";
- }
- return "False";
- }
- int Question1_1::run()
- {
- string input[] ={"abcde", "aba"};
- for (int i = 0; i < 2; i++)
- {
- cout << input[i] << " has unique characters: " << result(isUniqueChars(input[i])) << endl;
- cout << input[i] << " has unique characters: " << result(isUniqueChars2(input[i])) << endl;
- }
- return 0;
- }
1.2
- #ifndef __Question_1_2_h__
- #define __Question_1_2_h__
- class Question1_2
- {
- public:
- int run();
- void reverse(char* str);
- };
- #endif // __Question_1_2_h__
- #include<iostream>
- #include "Question1_2.h"
- using std::cout;
- using std::endl;
- void Question1_2::reverse(char* str)
- {
- char *ptrEnd = str;
- char temp;
- if (str)
- {
- while (*ptrEnd)
- {
- ptrEnd++;
- }
- ptrEnd--;
- while (str < ptrEnd)
- {
- temp = *str;
- *str++ = *ptrEnd;
- *ptrEnd-- = temp;
- }
- }
- }
- int Question1_2::run()
- {
- char input[][10] = { "abcde", "cat" };
- for (int i = 0; i < 2; i++)
- {
- cout << "reversing the string: " << input[i] << endl;
- reverse(input[i]);
- cout << "reverse of input string is " << input[i] << endl;
- }
- return 0;
- }
1.3
- #ifndef __Question_1_3_B_h__
- #define __Question_1_3_B_h__
- #include <string>
- using std::string;
- class Question1_3_B
- {
- public:
- int run();
- bool permutation(const string& a, const string& b);
- string result(bool value);
- };
- #endif // __Question_1_3_B_h__
- #include<iostream>
- #include<string>
- #include<algorithm>
- #include "Question1_3_B.h"
- using namespace std;
- bool Question1_3_B::permutation(const string& a, const string& b)
- {
- if (a.length() != b.length())
- {
- return false;
- }
- int ascii_set[256] = {0};
- for (int i = 0; i < a.length(); i++)
- {
- int val = static_cast<int>(a[i]);
- ascii_set[val]++;
- }
- for (int i = 0; i < b.length(); i++)
- {
- int val = static_cast<int>(b[i]);
- if ((--ascii_set[val]) < 0)
- {
- return false;
- }
- }
- return true;
- }
- string Question1_3_B::result(bool value)
- {
- if (value)
- {
- return "True";
- }
- return "False";
- }
- int Question1_3_B::run()
- {
- string a = "apple";
- string b = "papel";
- cout << "Result for " << a << " and " << b << " is " << result(permutation(a, b)) << endl;
- return 0;
- }
1.4
- #ifndef __Question_1_4_h__
- #define __Question_1_4_h__
- #include <memory>
- class Question1_4
- {
- public:
- int run();
- void replaceSpaces(std::unique_ptr<char[]>&, int length);
- };
- #endif // __Question_1_4_h__
- #include<iostream>
- #include<memory>
- #include<string>
- #include "Question1_4.h"
- using namespace std;
- void Question1_4::replaceSpaces(unique_ptr<char[]> &str, int length) //char str[]
- {
- int newLength, spaceCount = 0;
- //count the number of spaces in the given string.
- for (int i = 0; i < length; i++)
- {
- if (str[i] == ' ')
- {
- spaceCount++;
- }
- }
- //calculate new string size.
- newLength = length + spaceCount * 2;
- str[newLength] = '\0';
- //copying the characters backwards and inserting %20
- for (int i = length - 1; i >= 0; i--)
- {
- if (str[i] == ' ')
- {
- str[newLength - 1] = '0';
- str[newLength - 2] = '2';
- str[newLength - 3] = '%';
- newLength -= 3;
- }
- else
- {
- str[newLength - 1] = str[i];
- newLength--;
- }
- }
- }
- int Question1_4::run()
- {
- string str = "abc d e f";
- // Increasing length of the string to meet question requirement of 'true' length by using char array. (Note: using a unique_ptr here)
- auto newStr = make_unique<char[]>(str.length() + 3 * 2 + 1);
- for (int i = 0; i < str.length(); i++)
- {
- newStr[i] = str[i];
- }
- cout << "Original string is " << str << endl;
- replaceSpaces(newStr, str.length());
- cout << "New string with %20 is " << newStr.get() << endl;
- return 0;
- }
1.5
- #ifndef __Question_1_5_h__
- #define __Question_1_5_h__
- #include <string>
- using std::string;
- class Question1_5
- {
- public:
- int run();
- int stringToInt(const string& value);
- string intToString(int value);
- int countCompression(const string& str);
- /// C++ std::string is efficient and no need to use a "StringBuffer"-like structure.
- string compressBetter(const string& str);
- };
- #endif // __Question_1_5_h__
- #include<iostream>
- #include<string>
- #include<sstream>
- #include "Question1_5.h"
- using namespace std;
- int Question1_5::stringToInt(const string& value)
- {
- int temp;
- stringstream(value) >> temp;
- return temp;
- }
- string Question1_5::intToString(int value)
- {
- string temp;
- stringstream convert;
- convert << value;
- temp = convert.str();
- return temp;
- }
- int Question1_5::countCompression(const string& str)
- {
- if (str.length() == 0)
- {
- return 0;
- }
- char last = str.at(0);
- int size = 0;
- int count = 1;
- for (int i = 1; i < str.length(); i++)
- {
- if (str.at(i) == last)
- {
- count++;
- }
- else
- {
- last = str.at(i);
- size = size + 1 + intToString(count).length();
- count = 1;
- }
- }
- size = size + 1 + intToString(count).length();
- return size;
- }
- string Question1_5::compressBetter(const string& str)
- {
- int size = countCompression(str);
- if(size >= str.length())
- {
- return str;
- }
- string newstr;
- char last = str.at(0);
- int count = 1;
- for (int i = 1; i < str.length(); i++)
- {
- if (str.at(i) == last)
- {
- count++;
- }
- else
- {
- newstr += last;
- newstr.append(intToString(count));
- last = str.at(i);
- count = 1;
- }
- }
- newstr += last;
- newstr.append(intToString(count));
- return newstr;
- }
- int Question1_5::run()
- {
- string str = "abbccccccde";
- string newstr = compressBetter(str);
- cout << "Original string is " << str << endl;
- cout << "Compressed string is " << newstr << endl;
- return 0;
- }
1.6
- #ifndef __Question_1_6_h__
- #define __Question_1_6_h__
- class Question1_6
- {
- public:
- /**
- * Since we can't provide variable matrix size in C++, we will do it "the c way" and will provide a 1-dimensional
- * array
- */
- void rotate(int* matrix, int n);
- void printMatrix(int* matrix, int m, int n);
- int run();
- };
- #endif // __Question_1_6_h__
- #include <iostream>
- #include <memory>
- #include "Question1_6.h"
- using namespace std;
- void Question1_6::rotate(int* matrix, int n)
- {
- for (int layer = 0; layer < n / 2; ++layer)
- {
- int first = layer;
- int last = n - 1 - layer;
- for (int i = first; i < last; ++i)
- {
- int offset = i - first;
- // save top
- int top = matrix[first * n + i];
- // left to top
- matrix[first * n + i] = matrix[(last-offset) * n + first];
- // bottom to left
- matrix[(last-offset) * n + first] = matrix[last * n + (last-offset)];
- // right to bottom
- matrix[last * n + (last-offset)] = matrix[i * n + last];
- // top to right
- matrix[i * n + last] = top;
- }
- }
- }
- void Question1_6::printMatrix(int* matrix, int m, int n)
- {
- for (int i = 0; i < m; ++i)
- {
- for (int j = 0; j < n; ++j)
- {
- cout << matrix[i * n + j] << " ";
- }
- cout << endl;
- }
- }
- int Question1_6::run()
- {
- int matrix[][5] ={{1, 2, 3, 4, 5},
- {6, 7, 8, 9, 10},
- {11, 12, 13, 14, 15},
- {16, 17, 18, 19, 20},
- {21, 22, 23, 24, 25}};
- int* matrixPtr = (int*)matrix;
- cout << "original matrix is :" << endl;
- printMatrix(matrixPtr, 5, 5);
- rotate(matrixPtr, 5);
- cout << "rotated matrix is: " << endl;
- printMatrix(matrixPtr, 5, 5);
- return 0;
- }
1.7
- #ifndef __Question_1_7_h__
- #define __Question_1_7_h__
- class Question1_7
- {
- public:
- /**
- * Since we can't provide variable matrix size in C++, we will do it "the c way" and will provide a 1-dimensional
- * array
- */
- void setZeros(int* matrix, int m, int n);
- void printMatrix(int* matrix, int m, int n);
- int run();
- };
- #endif // __Question_1_7_h__
- #include <iostream>
- #include "Question1_7.h"
- using namespace std;
- void Question1_7::setZeros(int* matrix, int m, int n)
- {
- // Assuming M,N <= 32, we'll use a bit vector to represent whether a row/col should be set with zeros.
- int m_rows = 0;
- int m_cols = 0;
- for (int i = 0; i < m; ++i)
- {
- for (int j = 0; j < n; ++j)
- {
- if (matrix[i * n + j] == 0)
- {
- m_rows |= (1 << i);
- m_cols |= (1 << j);
- }
- }
- }
- for (int i = 0; i < m; ++i)
- {
- for (int j = 0; j < n; ++j)
- {
- if (((m_rows & (1 << i)) != 0) || ((m_cols & (1 << j)) != 0))
- {
- matrix[i * n + j] = 0;
- }
- }
- }
- }
- void Question1_7::printMatrix(int* matrix, int m, int n)
- {
- for (int i = 0; i < m; ++i)
- {
- for (int j = 0; j < n; ++j)
- {
- cout << matrix[i * n + j] << " ";
- }
- cout << endl;
- }
- }
- int Question1_7::run()
- {
- int matrix[4][5] ={{1, 2, 3, 4, 5},
- {6, 7, 8, 9, 10},
- {11, 12, 0, 14, 15},
- {16, 17, 18, 0, 20}};
- int* matrixPtr = (int*)matrix;
- cout << "original matrix is :" << endl;
- printMatrix(matrixPtr, 4, 5);
- setZeros(matrixPtr, 4, 5);
- cout << "zeroed matrix is: " << endl;
- printMatrix(matrixPtr, 4, 5);
- return 0;
- }
1.8
- #ifndef __Question_1_8_h__
- #define __Question_1_8_h__
- #include <string>
- using std::string;
- class Question1_8
- {
- public:
- string result(bool value);
- bool isRotation(const string& s1, const string& s2);
- int run();
- };
- #endif // __Question_1_8_h__
- #include<iostream>
- #include<string>
- #include "Question1_8.h"
- using namespace std;
- bool Question1_8::isRotation(const string& s1, const string& s2)
- {
- int len = s1.length();
- if(len == s2.length() && len > 0)
- {
- string s1s1 = s1 + s1;
- return s1s1.find(s2) != string::npos;
- }
- return false;
- }
- string Question1_8::result(bool value)
- {
- if (value)
- {
- return "True";
- }
- return "False";
- }
- int Question1_8::run()
- {
- string a = "apple";
- string b = "leapp";
- cout << "Checking if string: " << a << " is a rotation of string: " << b << ": "
- << result(isRotation(a, b)) << endl;
- a = "james";
- b = "mesje";
- cout << "Checking if string: " << a << " is a rotation of string: " << b << ": "
- << result(isRotation(a, b)) << endl;
- return 0;
- }
crack the coding interview的更多相关文章
- Cracking the coding interview
写在开头 最近忙于论文的开题等工作,还有阿里的实习笔试,被虐的还行,说还行是因为自己的水平或者说是自己准备的还没有达到他们所需要人才的水平,所以就想找一本面试的书<Cracking the co ...
- 转:Top 10 Algorithms for Coding Interview
The following are top 10 algorithms related concepts in coding interview. I will try to illustrate t ...
- Cracking the coding interview 第一章问题及解答
Cracking the coding interview 第一章问题及解答 不管是不是要挪地方,面试题具有很好的联系代码总用,参加新工作的半年里,做的大多是探索性的工作,反而代码写得少了,不高兴,最 ...
- Cracking the Coding Interview(Trees and Graphs)
Cracking the Coding Interview(Trees and Graphs) 树和图的训练平时相对很少,还是要加强训练一些树和图的基础算法.自己对树节点的设计应该不是很合理,多多少少 ...
- Cracking the Coding Interview(Stacks and Queues)
Cracking the Coding Interview(Stacks and Queues) 1.Describe how you could use a single array to impl ...
- 《Cracking the Coding Interview》读书笔记
<Cracking the Coding Interview>是适合硅谷技术面试的一本面试指南,因为题目分类清晰,风格比较靠谱,所以广受推崇. 以下是我的读书笔记,基本都是每章的课后习题解 ...
- Cracking the coding interview目录及资料收集
前言 <Cracking the coding interview>是一本被许多人极力推荐的程序员面试书籍, 详情可见:http://www.careercup.com/book. 第六版 ...
- Python Coding Interview
Python Coding Interview Python Advanced Use enumerate() to iterate over both indices and values Debu ...
- whiteboard & coding interview practice
whiteboard & coding interview practice 白板 & 面试 & 编码练习 Algorithm https://www.freecodecamp ...
随机推荐
- Go语言是我见过最简洁的语言(除了lua)
写在前面:题目就是个标题党,在这里先道歉,其次撸主学过很多语言(基本上是个语言都要上一下的那种人,但是不会太深入,只做了解,因为很多用不到),但主要使用C#语言(不过已经开始恶心C#的臃肿,不要打我) ...
- Angular19 自定义表单控件
1 需求 当开发者需要一个特定的表单控件时就需要自己开发一个和默认提供的表单控件用法相似的控件来作为表单控件:自定义的表单控件必须考虑模型和视图之间的数据怎么进行交互 2 官方文档 -> 点击前 ...
- Redis-配置认证密码
1.找到redis.conf,配置密码 2.要重新启动一下redis 3.用redis-cli重新登陆,我们查询的时候提示"Authentication required"查询失败 ...
- Linux 性能搜集【top/vmstat/iostat】
为方便问题发生后,问题原因的分析排查,我们可以在服务器中事先部署如下脚本,方便故障发生后,问题原因的分析排查 脚本部署方法: 1.将脚本[top_monitor.sh]上传到服务器 2.登陆虚拟机,并 ...
- greedy算法(python版)
greedy算法的核心思想是首先计算覆盖面大的部分,然后依次寻找其他覆盖面最大的部分.该算法的使用场景就像他的名字一样,当符合贪婪属性的时候就可以考虑. states_needed = set(['北 ...
- BSA Network Shell系列-nexec | runcmd | runscript | scriptutil的异同
说明下nexec.runcmd.runscript.scriptutil的异同 相同点: 四者都可以在远程机器执行命令.或者调用脚本. 不同点: nexec支持NSH命令,可以执行远程机的本地命令(非 ...
- linkin大话设计模式--门面模式
linkin大话设计模式--门面模式 随着系统的不断改进和开发,他们会变得越来越复杂,系统会生成大量的类,这使得程序的流程更加难以理解.门面模式可以为这些类提供一个简易的接口,从而简化访问这些类的复杂 ...
- 《.NET 设计规范》第 3 章 命名规范
<.NET 规范>第 3 章 命名规范 3.1 大小写约定 要把 PascalCasing 用于由多个单词构成的命名空间.类型以及成员的名字. 要把 camelCasing 用于参数的名字 ...
- 小白入门Docker基础篇
docker是什么 百科上的解释是这样的: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...
- spring之注解详解
一.类级别注解 通用:@Component("id") Controller层:@Controller("id") Service层:@Service(&quo ...