”程序员面试金典“ 的搜索结果

     BST Sequences:给定一个二叉搜索树,计算所有可以形成该二叉搜索树的数组。 根据二叉搜索树的性质,根一定是数组的首元素,而子树中所有节点也必须满足这个性质,因此可以先将左子树中的所有结果lSeq计算出来,然后...

     Validate BST:判断一棵树是否是二叉搜索树。 一种解法是可以通过中序遍历将树中元素复制到数组中,然后判断数组是否是有序的,但是这种解法在树中存在相同元素时会存在问题,不过一般来说二叉搜索树中不存在重复...

     Three in One:使用一个数组实现3个栈。 书上给了两种方法,一种固定每个栈的大小,另外一种动态改变栈的大小。动态改变栈大小时,3个栈的总大小不变,但是每个栈可以根据元素数量动态使用其它栈的空间。...

     String Rotation:假设函数isSubString(str1, str2)可以判断str2是否是str1的子串。给定两个字符串s1和s2,判断s1循环左移后,是否可以得到s2,例如,waterbottle循环左移3位后可以得到erbottlewat。...

     Zero Matrix:给定一个矩阵,将矩阵中0元素所在的行和列清零。 乍看这道题还是很简单的:遍历矩阵中的元素,如果出现0就将对应的行列清零。但是这样做是有问题的,当后续遍历到被清零的元素时,会继续清零,这样只要...

     Count of 2s:计算[0, n]中数字2出现的个数。 class Solution { public: int numberOf2sInRange(int n) { int remain, quotient, cnt = 0, base = 1; while(n != 0){ quotient = n / 10;... remain = n % 10;...

     Calculator:实现一个计算器,计算只包含数字和加、减、乘、除运算的表达式(在力扣上,运算符两侧可能有空格)。 因为表达式中不包含空格,类似语法分析,可以把表达式拆分为项表达式(Term),项中包含运算符和操作...

     Operations:只用加法和逻辑运算实现减法、乘法和除法。 另外力扣上又补充了可以使用正负常数,要不然没法做。 a - b可以理解为a + (-b),所以问题转化为求相反数,但是求相反数也需要用加法实现。...

     List of Depths:给定一棵二叉树,创建一个链表数组,每个链表包含树中每一层的节点。 看起来需要对二叉树进行层次遍历,但是这并不是必须的,只要知道当前在哪一层就可以了,所以可以采用先序遍历的方法,在遍历...

     有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。...做这道题时,完全不理解机器人具体是如何走的,如果按照面试金典中的解法,只能将“机器人只能”走格点理解为每个格子整

     Intersection:判断两个链表是否相交,相交定义为两个指针指向同一个节点,而不是两个链表的某个后缀值是相等的。 如果两个链表的尾节点是同一块内存,则两个链表必定相交。在相交的情况下,可以从尾结点往回遍历找...

     Partition:编写代码,将链表中小于x的元素放在链表的前半部分,大于x的元素放在链表的后半部分,没有顺序要求。 如果是数组的话,根据x对数组进行划分的方法类似于快排。对于链表会更简单一些,可以直接将原始链表...

     Remove Dups:删除未排序链表中的重复元素。如果不使用额外的存储空间应该怎么做? 为了删除链表中的重复元素,必须要对链表进行遍历。可以将已经遍历过的元素存储在一个集合中,如果再次出现相同的元素,就将其删除...

     编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分...

     Permutations with Duplicates:生成一个字符串的所有排列,字符串中包含重复字符。 可以借鉴上一题的解法,生成所有的排列然后去重,但是这种方法的效率太低了,我们更希望只枚举重复的排列一次。...

     Permutations without Dups:生成一个字符串的所有排列,字符串中不包含重复字符。 如果有了前n - 1个字符的全排列,那么只要把第n个字符依次插入到每个位置就可以了。但是在连续存储中插入字符的效率比较低,所以...

     Sorted Merge:给定两个已经排好序的数组A和B,将B合并到A中。 如果从数组头部开始合并,则需要开辟额外的空间,或者批量移动A中的元素,所以应该从数组尾部合并,也就是从大到小合并。 class Solution { ...

     Route Between Nodes:在有向图中查找两个节点之间是否存在一条路径。 很经典的图遍历问题,深搜和宽搜都能解决。注意图中可能存在环,所以要对访问过得节点进行标记。深搜可以写成递归,实现起来简单,宽搜一般用来...

     Return Kth to Last:返回单链表中倒数第k个元素。 下面会分别使用递归和非递归的方法来解决这道题,一般来说递归的方法写起来更容易,但是效率一般不是最好的,比如这道题递归解法的复杂度大约是非递归解法的一半,...

     一、题目介绍 设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。 如果指定节点没有对应的“下一个”节点,则返回null。 示例 1: 输入: root = [2,1,3], p = 1 ...来源:力扣(LeetCode...

10  
9  
8  
7  
6  
5  
4  
3  
2  
1