Cracking The Coding Interview4.5】的更多相关文章

//You are given a binary tree in which each node contains a value. Design an algorithm to print all paths which sum up to that value. Note that it can be any path in the tree - it does not have to start at the root. // // 译文: // // 给定一棵二叉树,每个结点包含一个值.…
//原文: // // Write an algorithm to find the 'next' node (i.e., in-order successor) of a given node in a binary search tree where each node has a link to its parent. // //译文: // // 给定二叉查找树的一个结点, 写一个算法查找它的"下一个"结点(即中序遍历后它的后继结点), 其中每个结点都有指向其父亲的链接. //…
//Given a sorted (increasing order) array, write an algorithm to create a binary tree with minimal height. // // 译文: // // 给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树. #include <iostream> #include <string> #include <queue> using namespace std; class…
写在开头 最近忙于论文的开题等工作,还有阿里的实习笔试,被虐的还行,说还行是因为自己的水平或者说是自己准备的还没有达到他们所需要人才的水平,所以就想找一本面试的书<Cracking the coding interview>,来练练手,顺带复习一下自己的基础知识,一些常用的数据结构,偶然在某位大神的blog里看到其分享的文章,还有他所做的解答,感觉自己的解答远没有他的简洁,且其解题都会优先考虑其空间和时间复杂度.本系列的文章只介绍,我做题过程中,遇到的一些好的思想方法,当然我会贴出一些代码.在…
Cracking the coding interview 第一章问题及解答 不管是不是要挪地方,面试题具有很好的联系代码总用,参加新工作的半年里,做的大多是探索性的工作,反而代码写得少了,不高兴,最近开始重新捡起面试题,来练练手,让自己保持代码的感觉. 代码主要是c的,可以避免使用容器之类的封装.因为使用c的话更能触及细节,而这也正是面试题所要考察的.同时,尽量为每道题添加了单元测试的用例. 代码是在windows下编辑运行的,只能保证在windows下正常运行,因为windows下的c编译器…
http://www.hawstein.com/posts/ctci-solutions-contents.html 作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处. 前言 <Cracking the coding interview>是一本被许多人极力推…
前言 最近准备暑假回家回家修整一下,所以时间大部分用来完成项目上的工作,同时为了9月份的校招,晚上的时间我还在学习<cracking the coding intreview>,第二章链表有几个不错的题目,记录一下   单链表 题目: Implement an algorithm to find the nth to last element of a singly linked list. 译文: 实现一个算法从一个单链表中返回倒数第n个元素 思路 7个节点的示例链表图如下: 例如我们找倒数…
Cracking the Coding Interview(Trees and Graphs) 树和图的训练平时相对很少,还是要加强训练一些树和图的基础算法.自己对树节点的设计应该不是很合理,多多少少会有一些问题,需要找一本数据结构的书恶补一下如何更加合理的设计节点. ? class TreeNode { public:     int treenum;       TreeNode** children;     int child_num;     int child_len;     in…
Cracking the Coding Interview(Stacks and Queues) 1.Describe how you could use a single array to implement three stacks. 我的思路:一般堆栈的实现会利用一个数组,这里一个数组若实现3个堆栈,直接考虑把数组划分为3个部分,相当于3个独立的数组,所以就有以下的实现. 但是,这种实现方式的缺点在于均分了每个stack需要的space,但是事先无法确定每个stack是否需要更多的spac…
<Cracking the Coding Interview>是适合硅谷技术面试的一本面试指南,因为题目分类清晰,风格比较靠谱,所以广受推崇. 以下是我的读书笔记,基本都是每章的课后习题解答,其中不包括第15章. 相关源码在此repo中可以找到:https://github.com/zhuli19901106/Cracking-the-Coding-Interview <Cracking the Coding Interview>——第18章:难题——题目13 <Cracki…
前言 <Cracking the coding interview>是一本被许多人极力推荐的程序员面试书籍, 详情可见:http://www.careercup.com/book. 第六版中文版里面有189道程序员面试题目及相应的解答. 书中大部分是编程题目, 并且配有相应的java程序. 我把书中的题目做了一遍, 并且记录下来,包含自己对问题的一些思路及看法,许多问题给出了两种以上的解答方案. 由于个人在学习Go语言,所以程序是用Go 1.13编写,所有的代码都托管在Github上: htt…
2014-04-25 20:07 题目:为什么基类的析构函数必须声明为虚函数? 解法:不是必须,而是应该,这是种规范.对于基类中执行的一些动态资源分配,如果基类的析构函数不是虚函数,那么 派生类的析构函数在自动调用的时候,不会调用基类的析构函数,这样就会造成资源未释放引起的内存泄漏. 代码: // 13.6 If a class is defined as base class, why must its destructor be declared "virtual"? // Ans…
2014-03-19 06:27 题目:有一个数组里包含了0~n中除了某个整数m之外的所有整数,你要设法找出这个m.限制条件为每次你只能用O(1)的时间访问第i个元素的第j位二进制位. 解法:0~n的求和有公式可循,只要把所有数都加起来就能知道缺少的m是几了.书本提供了一种比较高效的解法,我仔细读了以后觉得书上给的优化算法实际上需要额外的空间来支持,coding难度偏高,临场的话我估计挺难写出来的. 代码: // 5.7 Find the missing integer from 0 to n,…
第18章---高度难题 1,-------另类加法.实现加法. 另类加法 参与人数:327时间限制:3秒空间限制:32768K 算法知识视频讲解 题目描述 请编写一个函数,将两个数字相加.不得使用+或其他算数运算符. 给定两个int A和B.请返回A+B的值 测试样例: 1,2 返回:3 答案和思路:xor是相加不进位.and得到每一个地方的进位.所以,用and<<1之后去与xor异或.不断递归. import java.util.*; public class UnusualAdd { pu…
#include <iostream> #include <cstdio> #include <vector> #include <stack> #define ls(x) (((x + 1)<<1) - 1) #define rs(x) ((x + 1)<<1) using namespace std; ; typedef struct Node{ struct Node *left; struct Node *right; int…
关于字符串 问题描述:一般这类程序设计的题目较简单,通过设计字符串的反转,寻找子串,以及字符串的拼接.删除操作等问题. 问题 实现一个算法来判断一个字符串中的字符是否唯一(即没有重复)? 设计算法并写出代码移除字符串中重复的字符(不能使用额外的缓存空间)? 写一个函数判断两个字符串是否是变位词? 思路 这三个题目,几乎都要对字符串进行遍历,在遍历中寻求一些逻辑上的计算. 对于第一题,直接遍历判断是否后一个字符和前一个字符是否相同,这样时间复杂度就会很大,相比于把字符的Ascll码直接作为数组的下…
Write code to partition a linked list around a value x, such that all nodes less than xcome before alt nodes greater than or equal to. 分割一个链表,将值小于x的节点全部放在其他节点的前面. 解答: 我们可以创建两个不同的链表,其中一个用来连接比x小的节点,另外一个则连接大于等于x的节点,然后合并两个链表即可. public class Main { public…
Implement an algorithm to delete a node in the middle of a singly linked list,given only access to that node.EXAMPLEInput: the node c from the linked list a->b->c->d->eResult: nothing is returned, but the new linked list looks like a- >b- &…
Implement an algorithm to find the kth to last element of a singly linked list. 实现一个算法寻找链表中倒数第K个数.. 解答: 关于链表的问题,书中也提到了关键的两个技巧,一个是递归:另一个是 The"Runner"Technique,也就是使用两个指针同时遍历链表的方式.这道题可以分别用这两种方法来解决. import java.util.HashMap; public class List { int…
原文: Write code to remove duplicates from an unsorted linked list.FOLLOW UPHow would you solve this problem if a temporary buffer is not allowed? 译文: 删除链表中的重复元素, 另外,如果不使用临时存储空间怎么做? 解答: 如果空间没有限制,那么用一个map来标记链表中出现过的元素,然后从头到尾扫一遍链表,把出现过的删除就行了.时间复杂度O(n). 如果…
原文: Assume you have a method isSubstring which checks if one word is a substring of another. Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 using only one call to isSubstring ( i.e., “waterbottle” is a rotation of “erbott…
原文 Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are set to 0. 译文 写一个算法,如果一个MxN中的一个元素为0,那么将这个元素所在的行和列都设置为0. 解答 遍历一次矩阵,当遇到元素等于0时,记录下这个元素对应的行和列.并设置一个标记.在遍历完之后,再根据之前的标记设置矩阵的值. import java.util.BitSet; public…
原文: Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a method to rotate the image by 90 degrees. Can you do this in place? 译文 给一个NxN的矩阵,写一个函数把矩阵旋转90度. 并且要求在原矩阵上进行操作,即不允许开辟额外的存储空间. 解答 (一)Hawstein在他的Blog中http…
原文 Implement a method to perform basic string compression using the counts of repeated characters. For example, the string aabcccccaaa would becomea2blc5a3. If the "compressed" string would not become smaller than the original string, your metho…
原文 Write a method to replace all spaces in a string with'%20'. You may assume that the string has sufficient space at the end of the string to hold the additionalcharacters, and that you are given the "true" length of the string. (Note: if imple…
原文 Given two strings, write a method to decide if one is a permutation of the other. 译文 给你两个字符串,写一个方法来判断其中一个是不是另一个的permutation.如果两个字符串含有相同的字符,仅仅是顺序可能不同,那么他们就叫permutations.例如"ABCDEF"和"FEDCBA",我们可以认为它们是permutation. 解答 如果长度不同,则一定不是,否则我们可以…
原文 Implement a function void reverse(char* str) in C or C++ which reverses a null-terminated string. 译文 用C或者C++实现一个void reverse(char* str)的函数来逆转一个已null终止的字符串 解答 在C++里,设置俩指针,一个指向字符串头,一个指向尾,然后每次交换一个字符和,指针分别像中间移就行了.这里借用一下Hawstein(http://hawstein.com/pos…
原文: Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures? 译文: 实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构. (即只使用基本的数据结构) 解答: 假设题目中提到的字符是包含在ASCII中的字符的话,那么最多是256个.所以可以用一个256长的数组来标记,…
1. Arrays and Strings 1.1 Hash Tables 哈希表,简单的说就是由一个数组和一个hash函数组成实现key/value映射并且能高效的查找的数据结构.最简单的想法就是将hash(key)做为数组的下标(index)来存取. 但是为了防止hash的冲突(collisions),数组的大小必须设置得足够大,因此上面这种简单的实现在实际中是不可取的. 实际上,哈希表是一个固定大小的数组,数组的每个元素是一个链表(单向或双向)的头指针.每个元素被存放在hash(key)%…
文章的缘由可以参考此篇文章.目前完成了第二章,代码放在github上,地址在此.问题的描述都在对应的代码文件中.其他的章节仍在在进行中. 如果代码有问题,欢迎指正,谢谢. yetuweiba…