基础算法 - 分类
数组问题
1、在一个给定的从1到100的整型数组中,如何快速找到缺失的数字?
2、如何找到一个给定的整型数组中的重复数字?
3、在一个未排序的整型数组中,如何找到最大和最小的数字?
4、在一个整型数组中,如何找到一个所有成对的数字,满足它们的和等于一个给定的数字?思路:除以2,看看是否等于这个一半的值,DP
5、如果一个数组包含多个重复元素,如何找到这些重复的数字?
6、用 Java 实现从一个给定数组中删除重复元素?
7、如何利用快速排序对一个整型数组进行排序?quick sort 而不是bubble sort
8、如何从一个数组中删除重复元素?
9、用 Java 实现数组反转?
10、如何不借助库实现从数组中删除重复元素?
字符串相关问题
字符串仅仅是一个字符数组
1、如何输出字符串中的重复字符?前后指针,如果重复了则打印出来;
2、如何判断两个字符串是否互为回文?是否为旋转;
3、如何从字符串中输出第一个不重复字符?也有思路
4、如何使用递归实现字符串反转? 我们只用双指针实现了字符串反转
5、如何检查字符仅包含数字字符? replaceAll ?
6、如何在字符串中找到重复字符?
7、如何对给定字符串中的元音及辅音进行计数?
8、如何计算给定字符传中特定字符出现的次数?HashMap, getOrDefault();
9、如何找到一个字符串的全排列?回溯一下
10、在不使用任何库方法的情况下如何反转给定语句中的单词? reverse一个单词
11、如何判断两个字符串是否互为旋转? 相加,然后再判断是否包含;
12、如何判断给定字符串是否是回文?前后指针
链表问题
1、在一次遍历中,怎样发现单个链表的中间元素? 快慢指针
2、怎样验证给定的链表是环形的? 怎样发现这个环的起始节点? 这个有特定算法
3、怎样翻转链表? reverse linkedlist, 这个容易但要使用递归
4、不使用递归,怎样反转单个链表? for loop就可以,然后不断往前滚进
5、在未排序链表中,怎样移除重复的节点? 难道用HashMap去记录重复的节点
6、怎样找出单个链表的长度? 遍历一遍吗?
7、从单个链表的结尾处,怎样找出链表的第三个节点? 快慢指针
8、怎样使用栈计算两个链表的和? 压到栈里面?
二叉树问题
什么是二叉树的大小或深度,什么是叶节点,什么是节点,以及对流行的遍历算法的理解,例如前序、后序和中序遍历
1、二叉搜索树是如何实现的?Binary search tree
2、如何在给定二叉树上实现前序遍历?前根遍历,先遍历根再遍历左再右
3、不使用递归如何按照前序遍历给定二叉树?不使用递归那就得使用循环
4、如何在给定二叉树上实现中序遍历? 中根遍历,先左再中再右
5、不使用递归情况下如何使用中序遍历输出给定二叉树所有节点? 那就得靠循环
6、如何实现后序遍历算法? 后根遍历,就是根在最后遍历
7、如何不使用递归实现二叉树的后续遍历?
8、如何输出二叉搜索树的所有叶节点?关键字:二叉搜索树
9、如何在给定二叉树中计算叶节点数目?
10、如何在给定数组中执行二分搜索?找到target
编程面试问题之杂项
提前练习它们不仅能让你熟悉它们,而且还让你更自信地向面试官解释其解决方案
1、冒泡排序是如何实现的? i>i+1 就必须把其对调一下
2、迭代式快排算法是如何实现的? 递归式快排
3、你如何实现插入排序算法?
4、合并排序算法是如何实现的?
5、桶排序算法是如何实现的?
6、计数排序算法是如何实现的?
7、基数排序算法是如何实现的?
8、在不使用第三个变量的前提下如何交换两个数?b=a+b, a=b-a(a+b-a==b 这样就调换了), b=b-a(a+b-a==a+b-b==a 因为这时a==b)
9、如何检查两个矩形是否重叠?
10、如何设计一个自动售货机?