文章目录
基础知识
数据结构

面试题03.数组中重复的数字
面试题04.二维数组中的查找
面试题05.替换空格
面试题06.从尾到头打印链表
面试题07.重建二叉树
面试题09.用两个栈实现队列
算法与数据操作
面试题10-I.斐波那契数列
面试题11.旋转数组的最小数字
面试题12.矩阵中的路径
面试题13.机器人的运动范围
面试题14-I.剪绳子
面试题15.二进制中1的个数
高质量的代码
代码完整性
面试题16.数值的整数次方
面试题17.打印从1到最大的n位数
面试题18.删除链表的节点
面试题19.正则表达式匹配
面试题20.表示数值的字符串
面试题21.调整数组顺序使奇数位于偶数前面
代码的鲁棒性
面试题22.链表中倒数第k个节点
面试题23.链表中环的入口节点(环形链表II)
面试题24.反转链表
面试题25.合并两个排序的链表
面试题26.树的子结构
解决面试题的思路
画图让抽象问题具体化
面试题27.二叉树的镜像
面试题28.对称的二叉树
面试题29.顺时针打印矩阵
举例让抽象问题具体化
面试题30.包含min函数的栈
面试题31.栈的压入、弹出序列
面试题32-III.从上到下打印二叉树III
面试题33.二叉搜索树的后序遍历序列
面试题34.二叉树中和为某一值的路径
分解让复杂问题简单化
面试题35.复杂链表的复制
面试题36.二叉搜索树与双向链表
面试题37.序列化二叉树
面试题38.字符串的排列
优化时间和空间效率
时间效率
面试题39.数组中出现次数超过一半的数字
面试题40.最小的k个数
面试题41.数据流中的中位数
面试题42.连续子数组的最大和
面试题43.1~n整数中1出现的次数
面试题44.数字序列中某一位的数字
面试题45.把数组排成最小的数
面试题46.把数字翻译成字符串
面试题47.礼物的最大价值
面试题48.最长不含重复字符的子字符串
时间效率额空间效率的平衡
面试题49.丑数
面试题50.第一个只出现一次的字符
面试题51.数组中的逆序对
面试题52.两个链表的第一个公共节点
面试中的各项能力
知识迁移能力
面试题53-I.在排序数组中查找数字I
面试题53-II.0~n-1中缺失的数字
面试题54.二叉搜索树的第k大节点
面试题55-I.二叉树的深度
面试题55-II.平衡二叉树
面试题56-I.数组中数字出现的次数
面试题56-II.数组中数字出现的次数II
面试题57.和为s的两个数字
面试题57-II.和为s的连续正数序列
面试题58-I.翻转单词顺序
面试题58-II.左旋转字符串
面试题59-I.滑动窗口的最大值
面试题59-II.队列的最大值
抽象建模能力
面试题60.n个骰子的点数
面试题61.扑克牌中的顺子
面试题62.圆圈中最后剩下的数字
面试题63.股票的最大利润
发散思维能力
面试题64.求1+2+…+n
面试题65.不用加减乘除做加法
面试题66.构建乘积数组
面试题67.把字符串转换成整数
面试题68-I.二叉搜索树的最近公共祖先
面试题68-II.二叉树的最近公共祖先
基础知识数据结构面试题03.数组中重复的数字空间优先:原地排序法遍历数组,将遍历的数试探放入值正确位置,如果正确位置已经有过正确数了,且不是当前位置,说明发现了重复数了,退出如果正确位置不是正确值,将正确值交换到正确位置(93%,100%)
class Solution { public int findRepeatNumber(int[] nums) { for (int i = 0; i < nums.length; i++) { int n = nums[i]; //try if (n == nums[n] && n != i) return n; //swap int tmp = nums[i]; nums[i] = nums[n]; nums[n] = tmp; } //not find return -1; }}
时间优先:字典用两个字节的boolean 的数组,占用空间小
class Solution { public int findRepeatNumber(int[] nums) { boolean compare[] = new boolean[nums.length]; for (int i = 0; i < nums.length; i++) { if (compare[nums[i]]) return nums[i]; compare[nums[i]] = true; } return -1; }}
面试题04.二维数组中的查找
从左下或者右上为起点的查找:查找状态树是BST(双100%)
class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return false; int m = matrix.length; int n = matrix[0].length; int row = 0; int col = n - 1; while (row < m && col >= 0) { if (target == matrix[row][col]) return true; else if (target > matrix[row][col]) row++; else col--; } return false; }}
篇幅有限,以上算法题详解:三连后 私 555
原文出处:https://blog.csdn.net/qq_41170102/article/details/