刷一遍《剑指Offer》,你还需要这些知识!(一刷)
因为时间紧和基础薄弱,一刷《剑指Offer》就变成了速看。
我按照:
1、看题目思考一会;
2、上网找找关于题目里不懂的知识点;
3、看评论和官方题解的解法,尽量看懂,并及时弄懂不懂的地方;
4、将搜索到的资料和感觉优秀的解法记录在这个博客里。
这四步来完成一刷,之后再仔细二刷。
T07、深入学习二叉树(一) 二叉树基础:https://www.jianshu.com/p/bf73c8d50dc2
二叉树前序遍历和中序遍历的特点(前序遍历的顺序:根左右 ;中序遍历的顺序:左根右):首先利用前序遍历找到根节点,之后利用前序遍历数组找到的根节点找到对应中序遍历数组根节点的下标,
Arrays.copyOfRange(T[ ] original,int from,int to)将一个原始的数组original,从下标from开始复制,复制到上标to,生成一个新的数组。
注意这里包括下标from,不包括上标to。
T08、Stack的基本使用:初始化Stack stack=new Stack、判断是否为空stack.empty()、取栈顶值(不出栈)stack.peek()、进栈stack.push(Object)、出栈 stack.pop();search()返回对象在堆栈中的位置;
队列方法: add增加一个元索; remove移除并返回队列头部的元素 ;element返回队列头部的元素 offer添加一个元素并返回true poll移除并返问队列头部的元素 peek返回队列头部的元素 put添加一个元素
take 移除并返回队列头部的元素
队列(Queue):是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。栈(Stack):是限定只能在表的一端进行插入和删除操作的线性表。
一、规则不同:1. 队列:先进先出(First In First Out)FIFO 2. 栈:先进后出(First In Last Out )FILO
二、对插入和删除操作的限定不同1. 队列:只能在表的一端进行插入,并在表的另一端进行删除。2. 栈:只能在表的一端插入和删除。
三、遍历数据速度不同:
1. 队列:基于地址指针进行遍历,而且可以从头部或者尾部进行遍历,但不能同时遍历,无需开辟空间,因为在遍历的过程中不影响数据结构,所以遍历速度要快。
2. 栈:只能从顶部取数据,也就是说最先进入栈底的,需要遍历整个栈才能取出来,而且在遍历数据的同时需要为数据开辟临时空间,保持数据在遍历前的一致性。
可以使用LinkedList来做Stack的容器,因为LinkedList实现了Deque接口,所以Stack能做的事LinkedList都能做,其本身结构是个双向链表,扩容消耗少。
T11、排序数组的查找问题首先考虑使用 二分法 解决,其可将遍历法的 线性级别 时间复杂度降低至 对数级别 。
二分法的实现需要 两个下标变量(start和end)来控制查询数组的范围,默认是从0到数组的最后一个元素,然后需要获取数组的中间元素(下标为(start+end)/2的元素)与要查找的值作比较,如果这个元素大于查找的值,说明 要查找的值在数组下标0到(start+end)/2 之间,否则在下标(start+end)/2到数组最后一个元素之间。 所以 每次比较之前都是将查询的范围缩短一半,然后控制这个查询的范围依据就是根据上一次数组中间的元素与查找的值比较之后 数组的元素的下标来重新分配的,以便提高效率。
请问 mid = (left + right) /2 和 mid = left + (right - left) / 2 结果是不是一样的啊?答:结果一样,后面一种写法可以防止溢出
T12、String的两个方法:charAt(int index) 返回指定索引处的 char 值。toCharArray() 将此字符串转换为一个新的字符数组
深度优先算法(DFS)https://www.jianshu.com/p/bff70b786bb6
剪枝算法:https://blog.csdn.net/qq_41668547/article/details/88087187
T13、深度优先算法和广度优先算法
T14、

T15、

n&(n−1)解析: 二进制数字 n最右边的 1 变成 0,其余不变。
T16、

T19、
动态规划:https://www.cnblogs.com/CodingAndRiding/p/7619759.html
关键点截图:如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元?

刷一遍《剑指Offer》,你还需要这些知识!(一刷)的更多相关文章
- 二维数组的查找,刷题成功——剑指Offer
今天又做了一道题目,通过啦,欧耶! https://www.nowcoder.net/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqI ...
- Leetcode刷题记录 剑指offer
面试题3:数组中重复数字 # 使用set,时间复杂度O(n),空间复杂度O(n)class Solution(object): def findRepeatNumber(self, nums): &q ...
- #刷题记录--剑指 Offer 07. 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 抓住一点,通过递归进行节点创建时,是按照 前序遍历数组 进行创建的. 根节点,根节点的左 ...
- 剑指offer得意之作——顺时针打印矩阵
题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3 ...
- 高强度学习训练第九天总结:5道剑指offer的题目
实在不想看JVM了.刷几道剑指Offer的题,今天就水一水吧,脑子迷糊. 1.二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增 ...
- 剑指offer二刷(精刷)
剑指 Offer 03. 数组中重复的数字 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次. ...
- 剑指offer刷题
1.面试题43. 1-n整数中1出现的次数 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次 ...
- 刷《剑指offer》笔记
本文是刷<剑指offer>代码中的学习笔记,学习ing.. 衡量时间和空间. 递归的代码较为简洁,但性能不如基于循环的实现方法.
- 牛客网剑指offer刷题总结
二维数组中的查找: 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 两 ...
随机推荐
- poj2699 转化为可行性判定问题+二分枚举+最大流
The Maximum Number of Strong Kings Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2302 ...
- adb常用命令食用方法
一.什么是adb? adb是Android Debug Bridge的缩写,即安卓调试桥:那什么是安卓调试桥?简单来说,就是一个通用命令行工具,允许计算机与模拟器或连接的安卓设备之间进行通信,提供各种 ...
- zqt_helper 轻松开发Qt5 Widgets应用
目标: 1. 代码更加紧凑,所写即所到. 2. 代码层次更直观,直接反映界面窗口层次关系. 3. 不继承类,不重写虚函数,slot接收QEvent. 4. 简单写布局,忘掉api函数. 5. 免去一大 ...
- JS中的bind方法
# bind的机制 ``` var foo = function(){} var bar = foo; console.log(foo === bar) //true /--------------- ...
- pytest 使用
import pytestfrom web_ui_YXBI.test_datas.common_datas import Common_Datas as cfrom selenium import w ...
- Magicodes.SwaggerUI 已支持.NET Core 3.1
Magicodes.SwaggerUI 通过配置文件简单配置即可快速完成SwaggerUI的配置,包括: SwaggerUI的文档信息 API分组 API隐藏 API JSON生成(枚举.API架构I ...
- 使用Redis分布式锁实现主备
使用Redis分布式锁实现集群的主备 最近工作中遇到一个问题,我们会调用业务部门提供的HTTP接口获取所有的音视频任务信息,这些任务会被分发到各个机器节点进行处理.有两个方案: 方案一 为每台机器编号 ...
- 如何减小SRAM读写操作时的串扰
静态存储器SRAM是一款不需要刷新电路即能保存它内部存储数据的存储器.在SRAM 存储阵列的设计中,经常会出现串扰问题发生.那么要如何减小如何减小SRAM读写操作时的串扰,以及提高SRAM的可靠性呢, ...
- SpringBoot 之 拦截配置 与SpringCloud
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.SpringBoot 与 SpringMVC 的区别? SpringMVC是基于Spring的MV ...
- Java实现 LeetCode 554 砖墙(缝隙可以放在数组?)
554. 砖墙 你的面前有一堵方形的.由多行砖块组成的砖墙. 这些砖块高度相同但是宽度不同.你现在要画一条自顶向下的.穿过最少砖块的垂线. 砖墙由行的列表表示. 每一行都是一个代表从左至右每块砖的宽度 ...