ps:因为我对js 比较熟悉,所以解题都是用js实现
1、数组重复数字
解决思路:
一、使用对象存储值
二、遍历数组,如果遇上已存储的值就返回结果
2、二维数组中的查找
解决思路:
遍历数组中的所有元素,找到是否存在。
时间复杂度是 O(N^2),空间复杂度是 O(1)
3、替换空格
解决思路:
一、使用 js的replcae() 函数
二、匹配 /[ ]/ ,替换为 “%20”
4、从尾到头打印链表
解决思路:
一、后进先出的访问顺序,用栈比较简单,先把元素压到栈里
二、使用js的reverse() 输出
5、重建二叉树
解决思路:获取根节点区分左右子树,对于左子树的前序和中序采取同样的操作
6、用两个栈实现队列
解题思路:题目说使用两个栈实现队列: 栈, 后进先出, 表示只能使用 push 和 pop 方法
7、旋转数组的最小数字
解题思路:
原数组递增排列,那么该数组的所有片段都是递增排列,第一个不符合递增排列的元素就是旋转截断点,也就是最小值点。如果没有,就返回第一个元素
8、反转链表
解题思路:
利用3个变量在循环过程中记录最后3种信息
cur游标,一直往后循环,最后会为null
prev记录前一个节点
oldNext,变更方向时,需要先用oldNext记住改变前的next节点,否则无法向后循环
9、二叉树的镜像
解决思路:
一、特例化:针对root为null的情况,直接返回root
二、初始化:定义一个辅助栈,将根节点入栈
三、递归:判断栈不为空,则逐步出栈,将节点的左右节点互换,实现镜像
10、顺时针打印矩阵
解题思路:
剥洋葱,一层一层从矩阵中剥掉
11、字符串的排列
解题思路:
我用一个哈希表将字符串中的字母以及出现次数存储起来
然后用递归进行字符串组合,并将结果存进数组中返回
12、数组中出现次数超过一半的数字
解题思路:
排序 找到中位数
如果有小数 四舍
避免只输入一个数字 五入的话就会变为undefined
13、1~n 整数中 1 出现的次数
解题思路:
计算具体位数中有几个1。从最高位开始算起,一直到个位
14、翻转单词顺序
解题思路:
一、遍历字符串
二、以下一字符为空格或不存在为依据,获取每个单词,从头部添加至新字符串