摘要:
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 思路 假设一个数组中有 3 个数字,其中两个数字相同,那么这3个数字异或的结果就是那个只出现一次的数字,例如数组为 [1,2,1],则 1^2^1=2。题目中给的数组中存在两个只出现一次的数字,所 阅读全文
摘要:
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路1 求出左右子树的长度来判断。代码如下: 思路2 思路1先根据根结点的左右子树深度判断是否是平衡二叉树,然后根据左右子树的左右子树判断,是从上到下的过程,这一过程底层的节点会被重复遍历,影响性能。如果我们用后序遍历的方式遍历每个节点,那么 阅读全文
摘要:
题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路 一棵二叉树的深度是其左子树和右子树深度的最大值+1。拿左子树的深度来讲,左子树的深度等于其左右子树深度的最大值+1。递归这一过程即可,代码如下: 阅读全文
摘要:
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 思路 这个题考了二叉搜索树的一个性质:二叉搜索树的中序遍历序列是递增的。所以我们中序遍历一遍二叉排序树并记录下来,然后输出第k小的节点即可。代码如下: 阅读全文
摘要:
题目描述 统计一个数字k在排序数组中出现的次数。 思路1 直接遍历数组一遍,统计出现的次数,时间复杂度为O(logn)。代码如下: 由于二分查找的时间复杂度为O(logn),所以该算法的时间复杂度为O(logn)。 阅读全文
摘要:
题目描述 输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 思路 由于数据结构是链表,若两个链表存在公共节点,则从该公共节点往后的节点也是公共节点。 如果两个链表长度相等,则从头开始同时遍历两个链表,两个链表第一个相同 阅读全文
摘要:
## 题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). ## 思路1 遍历字符串,判断当前字符是否在当前字符之后出现过,也就是需要两个循环,时间复杂度为O(n^2)。 ## 思路2 使用哈 阅读全文
摘要:
题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 思路1 对每个数字都判断该数字是不是丑数,然后返回第N个丑数即可。丑数的判断方法是:如果一个数字能被2整除 阅读全文
摘要:
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 思路1 求出数组中所有元素的排列,然后找出最小的数返回。求字符串的排列可以参考 "面试题38:字符串的排列" , 阅读全文
摘要:
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6, 3, 2,7, 15,1 阅读全文