12 2019 档案
摘要:题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 这道题我们用unordered_set来做,读入一个数x,我们就把它插入到unordered_set中,并在哈希表中看一下sum-x 是不是已经在unordered
阅读全文
摘要:题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 这道题主要是在思路上要想通
阅读全文
摘要:题目:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a st
阅读全文
摘要:链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
阅读全文
摘要:链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的
阅读全文
摘要:题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 这道题也是二叉树的层次遍历,但要求按行打印,并且是之字形的,需要定义一个flag,确定这一行的打印顺序是从左到右还是从右至左。每行打印完,只要将fl
阅读全文
摘要:题目: 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖 一次 该股票可能获得的利润是多少? 例如一只股票在某些时间节点的价格为[9, 11, 8, 5, 7, 12, 16, 14]。 如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。 解决这道题的关键在于找到当
阅读全文
摘要:链接:https://leetcode-cn.com/problems/longest-common-subsequence 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除
阅读全文
摘要:题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 首先特判一下这棵树是不是空的,如果是空,那么返回true。 因为判断二叉树的镜像,我们要看它的左、右子树,所以递归函数dfs的参数应该有两个,一个是左子树的根节点,一个是右子树的根节
阅读全文
摘要:题目:输入两个链表,找出它们的第一个公共结点。 这道题可以画一个图,就会很清楚。解决方法是让两个指针从两个链表的头结点开始走,当指针走到空的时候,让它再从另一个链表的头结点开始走。当两个指针相遇的位置就是公共结点,两个指针相遇就是它们相等。如果不存在公共结点,则两个结点又都走向空,那这个时候则返回空
阅读全文
摘要:题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。 这道题比较考验思维。平衡二叉树的条件是左、右子树的深度差不大于1,所以我们首先需要计算出二叉树的深度。而这道题需要返回的并不是深度,而是一个布尔值,因此我们初始认为这棵树是平衡的,在计算深度的过程中,如果发现左、右子树的深度大于1了,就将答案置为
阅读全文
摘要:题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 这道题用递归的方法非常的简单,一颗树的最大深度,其实可以看作是它的左子树和右子树中,最大的那个子树的深度+1,就是这棵树最大的深度。边界条件是当遍历到空节点的时候,深度为0
阅读全文
摘要:题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 首先需要知道,二叉搜索树的特点是,左子树的所有节点的值都小于根节点的值,右子树的所有节点的值都大于根节点的值。后序遍历是按照左——右——根的顺序进行遍历的
阅读全文
摘要:题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 这道题是非常基础的一道题,没有特殊的要求,用队列就可以解决。将root节点放到队列里,如果队列不为空,每次弹出队首元素,并将队首元素的值放到数组里。如果这个队首元素有左儿子,则把左儿子压入队列,如果有右儿子,把右儿子也压入队列。因为队列是
阅读全文
摘要:题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 这道题有点复杂,要用到两个递归来判断。首先因为约定的空树不是任意一个树的子树,所以先判断一下两个树是不是为空,若空则返回false。 然后用另一个递归函数判断B是不是当前树A的子结构。如果是,则返回tr
阅读全文
摘要:题目:操作给定的二叉树,将其变换为源二叉树的镜像。 这道题用递归来做非常简单,二叉树的镜像就是将两个子树互换,对于每个子树,都递归进行这个操作就可以。 总的来说,就是先交换root节点的两个子节点,在对左子树进行镜像,对右子树进行镜像。 c++代码如下:
阅读全文
摘要:题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0. 输入一个字符串,包括数字字母符号,可以为空。如果是合法的数值表达则返回该数字,否则返回0。 这道题没有独特的解题思路,就按照要求做就可以。首先输入的字符串前面一部分可能有空格,或者
阅读全文
摘要:题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 这道题也是很基础的一道题,当两个链表都有值时,也就是它们都不为空时,我们需要对比它们表头的大小,让新链表指向值小的那个链表。这里需要给新链表定义一个虚拟头节点。指向操作完成后,让值小的那个链表往前走一
阅读全文
摘要:题目:输入一个链表,输出该链表中倒数第k个结点。 这道题可以用快慢指针做,先让first指针走k步,然后first和second指针一起走,直到first指针走到空,这时候second指针就指向倒数第k个结点。 c++代码如下:
阅读全文
摘要:题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 这道题如果没有相对位置的要求的话,可以让两个指针i和j分别指向头和尾,指针i从前往后走,当指针i指向偶数时,停下来;指针j从
阅读全文
摘要:题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 这道题可以用模拟的方法解决,初始时令a=0, b=1,因为斐波那契数列就是求前两个数的和,所以我们通过变量r对a和b求和。 在循环的开始,令r=a+b,然后依次赋值移动,令a=b,
阅读全文
摘要:题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 这道题可以用二分来解
阅读全文
摘要:题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 队列是先进先出,而栈是后进先出,因此pop操作有所不同。在pop时,应该把栈1中的元素都压入栈2,此时栈2的顶部就是队列应该pop的元素,然后把栈1恢复原状,即,将栈2的元素再压回至栈1。push操作并无不同
阅读全文
摘要:题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 这道题也很简单,定义一个数组,将链表从头到尾放入数组,最后返回的时候,从尾到头返回即可。 c++代码如下:
阅读全文
摘要:题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 这道题用python写是非常简单的,当读到空格时将%20加入到字符串中就好,如果读到的不是空格,就把读到的字符加入到字符串中。 pyt
阅读全文
摘要:题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 这道题的思路是这样的,最右上角的数一定是每一行最大的数,也是那一列最小的数,那么每次可以用targe
阅读全文

浙公网安备 33010602011771号