leetcode刷题笔记
2 两数相加题目:
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
例子:
12输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输出:[8,9,9,9,0,0,0,1]
思路:
先创建一个头结点re值为0,这样返回的时候返回re.next就可以了。
12345678910111213141516171819202122class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode root = new ListNode(0); ListNode cursor = root; int carry = 0; while(l1 != null || l2 != null || carry != ...
刷题算法
动态规划框架
确定状态:原问题和子问题中变化的变量。状态决定了问题什么时候算是解决了。
确定dp函数定义:
一般就是问题
也可以是中间子问题,比如第二、三个例题
确定选择并择优:对于当前状态,有哪些选择可以改变状态,向着问题的解决前进。
明确badcase
使用备忘录数组记录已经访问过的状态
例题最长公共子序列题目:#1143
给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。
一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,”ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。
若这两个字符串没有公共子序列,则返回 0。
思路:
用两个指针,从指针位置到字符串末尾,是当前状态下的字符串。状态量其实就是字符串长度。
dp函数:返回当前长度下的两个字符串的最长公共子序列长度
选择并择优:如果当前两个指针的字符相等,则返回递归函数值+1;如果不等,有三种 ...
红黑树
RBTree的定义
任何一个节点都有颜色,黑色或者红色。
根节点是黑色的。
父子节点之间不能出现两个连续的红节点。
任何一个节点向下遍历到其子孙的叶子节点,所经过的黑节点个数必须相等。
如果一个节点存在黑子节点,那么该节点肯定有两个子节点
空节点被认为是黑色的。
1234567class Node<T>{ public T value; public Node<T> parent; public boolean isRed; public Node<T> left; public Node<T> right;}
红黑树在插入和删除操作时会维持树的平衡,即保证树的高度在[logN,logN+1],查找、删除和插入操作复杂度是O(logN)。
旋转旋转操作(Rotate)的目的是使节点颜色符合定义,让RBTree的高度达到平衡。
左旋:以某个节点作为支点(旋转节点),其右子节点变为旋转节点的父节点,右子节点的左子节点变为旋转节点的右子节点,左子节点保持不变。
右旋:以 ...
HashMap和ConcurrentHashMap
HashMap根据键的hashCode值存储数据,非线程安全。
如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap。
存储结构数组+链表+红黑树(JDK1.8增加了红黑树部分)
Node对象:Node<K,V>
哈希桶数组:Node[] table
Node[] table的初始化长度length(默认值是16);
Load factor为负载因子(默认值是0.75);
threshold是HashMap所能容纳的最大数据量的Node(键值对)个数。
threshold = length * Load factor
根据key获取哈希桶数组索引位希望元素位置尽量分布均匀一些
源码如下:
1234567891011方法一:static final int hash(Object key) { //jdk1.8 & jdk1.7 int h; // h = key.hashCode() 为第一步 取hashCod ...
synchronized
Syschronized可以保证方法或者代码块在运行时同一时刻只有一个线程能进入临界区,同时保证共享变量对其他线程的可见性
使用方法synchronized关键字最主要的三种使用方式:
普通方法,只对当前实例对象加锁
静态方法,对类的所有对象加锁
代码块
this :对当前实例对象加锁
Classname.class:对类的所有对象加锁
普通方法123456789101112public synchronized void run() { { for (int i = 0; i < 5; i++) { try { System.out.println("线程名:"+Thread.currentThread().getName() + ":" + (count++)); Thread.sleep(100); } cat ...
操作系统
概述四大基本特征
并发:一段时间内多个程序同时运行(并行是一个时刻多个指令同时运行)
共享:资源共享
虚拟:虚拟地址,为物理硬件提供逻辑接口来降低使用难度
异步:进程走走停停,上下文切换
基本功能
进程管理
内存管理
文件管理
设备管理
用户态和内核态区别操作系统的两种运行级别
用户态:
R3特权级,特权最低
进程所能访问的内存空间和对象受到限制
占有的处理器可被抢占
内核态:
R0特权级,特权最高;
能访问所有的内存空间和对象
占有的处理器不允许被抢占
用户态到内核态的切换(三种中断)其实就是三种中断
外中断
当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序
异常
当 CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常
系统调用
这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。比如前例中fork()实际上就是执行了 ...
数据库面试点
索引各种索引概念的区别聚簇索引和非聚簇索引聚簇索引和非聚簇索引是从物理存储方面进行划分的。 根本区别是:表记录的排列顺序和与索引的排列顺序是否一致。
聚集索引表记录的排列顺序与索引的排列顺序一致,索引中包含数据。优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排, 降低了执行速度。
非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致。聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的存储空间直接挂钩。
主键索引和辅助键索引主键索引对主键构建的索引,是在我们创建表激活后由系统自动创建的。辅助键索引是对非主键的列构建的索引,由我们自己创建。
一级索引和二级索引一级索引其实就是聚簇索引(聚簇索引必定是由主键构成的),可以直接拿到值。因为其他索引都得重新走一遍聚簇索引才能拿到值。
二级索引是和一级索引相比较的概念,是辅助键索引有时候的称呼(存在聚簇索引就可以称呼辅助键索 ...
数据库语法
基础模式定义了数据如何存储、存储什么样的数据以及数据如何分解等信息,数据库和表都有模式。
主键的值不允许修改,也不允许复用(不能将已经删除的主键值赋给新数据行的主键)。
SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。各个 DBMS 都有自己的实现,如 PL/SQL、Transact-SQL 等。
SQL 语句不区分大小写,但是数据库表名、列名和值是否区分依赖于具体的 DBMS 以及配置。
SQL 支持以下三种注释:
12345# # 注释SELECT *FROM mytable; -- 注释/* 注释1 注释2 */
数据库创建与使用:
12CREATE DATABASE test;USE test;
创建表12345678910111213CREATE TABLE table_name (column_name column_type);CREATE TABLE mytable ( # int 类型,不为空,自增 id INT NOT NULL AUTO_INCREMENT, ...
计算机网络
HTTPHTTP的报文结构
HTTP请求种类
get:获取资源(多媒体,程序执行结果)
post:传输实体主体,相比于 get 传输,post 请求的数据会放置在内容实体中而不是 uri(Universal Resource Identifier) 之后,安全性大大增强
put:传输文件,由于 http1.1 本身不自带验证机制,所以安全性欠佳。一般 web 不使用此方法
head:获得报文首部,与 get 一样,只是不获取报文主体,用来验证 uri 的有效性
delete:删除文件 类似 put
options:询问支持的方法
trace:追踪路径,让 web 服务器端将之前的请求通信环回给客户端,用来确认连接过程中,代理中转的加工/篡改。
connect:要求用隧道协议连接代理,主要使用 ssl 和 tsl 把通信内容加密后经网络隧道传输
HTTP状态码HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
1信息通知,2成功,3暂时没成功,但可以重定向,45是失败,4是客户端错误,5是服务器错误
...
捐献
无他
登记了器官和眼角膜捐献
以上