
程序员面试金典
summer2day
这个作者很懒,什么都没留下…
展开
-
【程序员面试金典】原串翻转
题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。 测试样例: “This is nowcoder” 返回:“redocwon si sihT” C++代码: class Reverse { public: s...原创 2019-07-19 10:24:29 · 159 阅读 · 0 评论 -
【程序员金典】回文链表
题目描述 请编写一个函数,检查链表是否为回文。 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。 测试样例: {1,2,3,2,1} 返回:true {1,2,3,2,3} 返回:false c++代码 方法一: 链表前半部分入栈,后半部分与栈中的元素比较 /* struct ListNode { int val; struct ListNode...原创 2019-07-20 20:17:00 · 281 阅读 · 0 评论 -
【程序员金典】链式A+B
题目描述 有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。 给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。 测试样例: {1,2,3},{3,2,1} 返回:{4,4,4} c++代码 /* struct ListNode { int val...原创 2019-07-20 18:56:15 · 164 阅读 · 0 评论 -
【程序员金典】链表分割
题目描述 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(...原创 2019-07-19 22:25:57 · 128 阅读 · 0 评论 -
【程序员金典】访问单个节点的删除
题目描述 实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。 给定待删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true c++代码 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} };*/ cla...原创 2019-07-19 21:46:40 · 146 阅读 · 0 评论 -
【程序员金典】实时中位数
题目描述 现有一些随机生成的数字要将其依次传入,请设计一个高效算法,对于每次传入一个数字后,算出当前所有传入数字的中位数。(若传入了偶数个数字则令中位数为第n/2小的数字,n为已传入数字个数)。 给定一个int数组A,为传入的数字序列,同时给定序列大小n,请返回一个int数组,代表每次传入后的中位数。保证n小于等于1000。 测试样例: [1,2,3,4,5,6],6 返回:[1,1,2,2,3,...原创 2019-07-19 21:29:24 · 175 阅读 · 0 评论 -
【程序员金典】子串判断
题目描述 现有一个小写英文字母组成的字符串s和一个包含较短小写英文字符串的数组p,请设计一个高效算法,对于p中的每一个较短字符串,判断其是否为s的子串。 给定一个string数组p和它的大小n,同时给定string s,为母串,请返回一个bool数组,每个元素代表p中的对应字符串是否为s的子串。保证p中的串长度小于等于8,且p中的串的个数小于等于500,同时保证s的长度小于等于1000。 测试样例...原创 2019-07-19 20:46:08 · 172 阅读 · 0 评论 -
【程序员金典】翻转子串
题目描述 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。 给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。 测试样例: “Hello world”,"worldhe...原创 2019-07-19 20:37:28 · 187 阅读 · 0 评论 -
【程序员金典】清除行列
题目描述 请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。 给定一个N阶方阵int[]mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector>),保证n小于等于300,矩阵中的元素为int范围内。 测试样例: [[1,2,3],[0,1,2],[0,0,1]] 返回:[[0,0,3],[0,0,0],[0,0,0]] 解析: 用两个数组分别记录包...原创 2019-07-19 20:06:46 · 202 阅读 · 0 评论 -
【程序员金典】像素翻转
题目描述 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。 测试样例: [[1,2,3],[4,5,6],[7,8,9]],3 返回:[[7,4,1],[8,5,2],[9,6,3]] ...原创 2019-07-19 19:47:12 · 165 阅读 · 0 评论 -
【程序员金典】字符串互异
题目描述 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。 测试样例: “aeiou” 返回:True “BarackObama” 返回:False 方法一: 时间...原创 2019-07-19 19:46:04 · 181 阅读 · 0 评论 -
【程序员金典】基本字符串压缩
题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。 给定一个string iniString为待压缩的串(长度小于等于10000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。 测试样例 “aabcccccaaa” ...原创 2019-07-19 11:31:14 · 143 阅读 · 0 评论 -
【程序员金典】空格替换
请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。 给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。 测试样例: "Mr John Smith”,13 返回:“Mr%20John%20Smith” ”Hell...原创 2019-07-19 11:17:50 · 121 阅读 · 0 评论 -
【程序员面试金典】确定两串乱序同构
题目描述 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串中的空格。 给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。 测试样例: “This is nowcoder”,“is This nowcoder” 返回:t...原创 2019-07-19 10:40:19 · 139 阅读 · 0 评论 -
【程序员金典】双栈排序
题目描述 请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。 给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到最后一个元素。 测试样例: [1,2,3,4,5] 返回:[5,4,3,2,1...原创 2019-07-20 21:02:05 · 191 阅读 · 0 评论