1.丑数的判断 以及计算 自然数第n个丑数(质数因子只有2,3,5,1本身算是一个丑数)
2.抢劫问题 数组中取出不相邻的2个数字使得和最大 升级版:最后一个和第一个是相邻的如何思考? 数组的子数组的最大和问题;
3.判断2个二叉树是否是相同的? 最大深度? 最小深度? 是否平衡二叉树? 是否镜像对称? 二叉树的invert,使其称为镜像
4.一个数组中是否存在相同的数字 存在相同数字的情况下,下标的之差不大于k ? 2个数字差小于t,下标只差不大于k? 分别如何思考
5.数组中返回目标数字的下标(二分法)
6.判断一个数字是否是回文数字 123 321
7.判断一个字符串是否是回文串,忽略大小写与空格
8.遍历二叉树,判断是否有一条路径使得和为目标值 (递归) 返回所有符合规则的路径集合(DFS)
9.手写一个数字的平方(递归)
10.去除一个数组中重复的数字,并返回新的长度(借助集合去重)
11.找出数组中只出现一次的数字; 找出数组中只出现1次的2个数字;只出现1次的3个数字;找出数组中只出现1次,但其他数字出现至少3次的数 字等等,问题的延伸,如何思考?
12.返回一个数组中每个数字右边比自己小的数字个数的数组;(2个for循环时间复杂度较高)
13.对一个数字进行开方,以及判断一个数字是否是2的幂次方,是否是3的幂次方?
14.购买股票的最大利润,只有1笔; 当允许多笔交易时?只有2笔时?分别如何思考
15.数组中找出所有符合2个数字之和等于目标值的所有集合,3个数字,4个数字?
16.判断括号的匹配性(采用栈的结构)
17.二叉树的递归与非递归的遍历(工具类的实现);
18.所有排序算法的代码实现
19.链表定义以及相关问题的解决(反转,倒数第K个?查找) 删除倒数第K个节点,链表的加法,列表中是否存在环,环的长度,以及环的起始位置;
20.找出缺失的数字 3种思路 1.和法 2.排序二分查找 3.与法
21.找出所有的素数(<n)标记法,标记当前遍历数字的整数倍,剩下的数字就是素数(如何判断一个数字是素数)
22.对数组中的最后一位进行加1的运算 [1,2,3,4]->[1,2,3,5]
23.实现字符串的二进制加法 “111” + “11” = “1010”
24.给定一个字符串s由大写/小写字母和空白字符组成' ',返回字符串中最后一个单词的长度。
25.求出2个数组的交集和并集(注意时间的复杂度和空间复杂度)
26.数组向右移动K位后的数组 1,2,3,4 eg: 2位 3,4,1,2
27.一个数字的拆分,思路:使得数字的乘积最大,尽可能分出很多的3,4可以分为2,2
28.给定一个升序的数组,给一个目标值,返回目标值的下标范围
29.位运算的集合,计算2数之和,数字二进制反转表示数字的返回, 数字二进制中1的个数,等等
30.在旋转数组中进行查找目标值(先假设数组没有重复的元素),如果数组有重复又该如何考虑?
31.找出数组中出现大多次的元素,大于n/2次的元素,前提是假设这样的元素总是存在
32.给定一个正整数,返回可以构建的最多个数的二叉搜索树(亚特兰数的构成)
33.有序数组构建一个搜索二叉树(递归,二分法)
34.对链表的排序(时间复杂度nlogn ,空间复杂度在n)
35.返回树同深度的数字集合(DFS 回溯法) 螺旋遍历法 倒序遍历法
36.Roman与数字之间相互转换
37.对K个链表进行数字大小的排序
38.KMP算法的理解
39.排列 组合 算法思想的代码解释(17)