摘要:题目一 输入一个递增的数组和一个数字,在数组中查找2个数字,是他们的和正好为S,如果有多对的和为S,则输出任意一对即可。 题解 关键信息是数组有序。初始化i,j指向第一个和第二个数,与S比较,若小了, j,若大了,++i。舍弃掉的元素表示它再也不能和别的数相加等于目标数了,充分利用了有序性。时间复杂
阅读全文
摘要:题意 给一个字符串,只由数字组成,若是'1' '26',则认为可以转换为'a' 'z'对应的字母,问有多少种转换方法。 题解 状态转移很好想,注意dp多开一位,dp[0]为dp[2]的计算做准备。dp[i]表示到索引为i 1的字符(含)为止转换方法数。 代码 public class Main {
阅读全文
摘要:题意 一棵多叉树代表员工的上下级关系,孩子节点是父节点的直接下级。节点代表员工,属性包括快乐值和孩子节点列表。 大家参加了party,要求一个员工去了则它的所有直接下级都不能去,问参加party能得到的最大快乐值是多少。 题解 我原本的思路是一层员工去不去是它上面一层去和不去两种状态转移过来的,但是
阅读全文
摘要:总述 书的定位:一本十分浅显的HTTP书籍,主要介绍了HTTP与HTTPS。适合入门了解,很多地方都是蜻蜓点水,但稍微深入的地方能让人了解重点在哪,后面应该有针对性地阅读深入书籍。 主要内容:介绍了TCP/IP;介绍了HTTP协议的一些特点;HTTP报文内部的一些格式、特点;HTTP状态码;Web服
阅读全文
摘要:题目 例:arr=[2,1,5,3,6,4,8,9,7] ,最长递增子序列为1,3,4,8,9 题解 step1:找最长连续子序列长度 dp[]存以arr[i]结尾的情况下,arr[0..i]中的最长递增子序列的长度。 额外加一个ends[]数组,初始化ends[0]=arr[0],其他为0。有一个
阅读全文
摘要:题目 给定无需数组arr,返回器中最长的连续序列的长度。 举例子:arr=[100,4,200,1,3,2],最长连续序列为[1,2,3,4],返回4. 题解 法一:排序,再遍历找。时间复杂度O(nlogn),空间复杂度O(n) 法二: 用map,key代表遍历过的某个数,value代表key这个数
阅读全文
摘要:题解 固定行数的矩阵的最大值可以压缩成一维数组做,做一维数组时当summax?sum:max; } } return max; } } ```
阅读全文
摘要:题意 计算完全二叉树节点数。 题解 不使用遍历方法,优化时间复杂度到O(H^2)。 高度为h的满二叉树节点数为2^h 1。 设计递归函数search(Node root,int h,int H),返回当前节点roo为根的完全二叉树的节点数。h代表该节点在的高度,高度从1计算,H代表原始二叉树的高度始
阅读全文
摘要:直接插入排序 适合原本基本有序的序列。 时间复杂度O(n^2)。 插入排序详细步骤 代码 希尔排序 设置初始增量,增量慢慢变为原来的1/2,保证增量条约对应的一组组数内部有序,采用直接插入排序。 是改进的插入排序,就是为了使数组基本有序:指小的基本在前面,中的基本在中间,大的基本在后面。(区分于局部
阅读全文
摘要:题意 如题,并要求额外空间复杂度为O(1)。 题解 若不要求额外空间复杂度。普通做法时间复杂度O(n). 此题思路是先排序,然后判断相邻两个是否有重复元素。时间复杂度O(n),空间复杂度O(1). 堆排序再理解 堆排序步骤 1、堆的初始化,从最后一个非叶节点为根调整,向前一个个节点为根调整。 2、从
阅读全文
摘要:request&response 重定向(跳转) 301 永久跳转/302 临时跳转 工业用途 通过url判断来自手机页面,就跳转到手机对应的页面。 活动页面临时改url? 异常处理 定义一个handler对抛出的异常进行统一处理。 数据库CRUD操作
阅读全文
摘要:TCP IP CLOSE_WAIT状态 查看端口占用情况 ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。 代理服务器 概述 代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层
阅读全文
摘要:问题:MySQL 8.0版本连接报错:Could not create connection to database server 原因 MySQL8.0版本需要更换驱动为“com.mysql.cj.jdbc.Driver”,之前的“com.mysql.jdbc.Driver”已经不能在MySQL
阅读全文
摘要:9.1Java集合框架 一些有的没的 可以使用接口类型存放集合的引用。一旦改变了想法,只需要在调用构造函数的地方做一处修改。 add方法用于向集合添加元素,如果添加元素确实改变了集合就返回true。 tostring()方法用来调试。 迭代器 不同于C++,查找操作与迭代器的位置变更是紧密相连的,在
阅读全文
摘要:题意 题目如题,输入序列只包含小写字母,数据范围0 stack=new Stack(); int cntToDel=str.length() k; for(int i=0;istr.charAt(i)) { stack.pop(); cntToDel; } //如果已经删了n k个元素 if(cnt
阅读全文
摘要:题意 随着数据流的读入,输出中位数,若当前度入数据有偶数个则取中间两个平均值。 题解 大根堆维护小的一半数,小根堆维护大的一半数。 插入时间复杂度O(logn),查找时间复杂度O(1)。 相关 Java中优先队列是用堆实现的。 todo compare的返回值控制比较、排序还是搞不太懂==。 代码
阅读全文
摘要:题意 数据流读入数字(保证 =1),i最初=0,当i+1出现时,输出i+1及其后连续的输入过的数字,否则什么也不输出。 例子: 输入:1 输出:1 输入:3 输出: 输入:4 输出: 输入:6 输出: 输入:2 输出:2 3 4 题解 用链表+headMap+tailMap存。 总时间复杂度O(n)
阅读全文
摘要:题意 给串A和串B,找到A包含B所有出现字符(相同字符出现几次就要包含几次)的最小子串,输出子串长度 题解 维护一个窗口作为当前考察子串,使用一个hashmap记录每个字符在当前子串已出现情况。时间复杂度O(n). 代码
阅读全文
摘要:##题目1 解 先序遍历树1,判断树1以每个节点为根的子树是否包含树2的拓扑结构。 时间复杂度:O(M*N) 注意区分判断总体包含关系、和判断子树是否包含树2的函数。 ###代码 public class Main { public static void main(String args[]) {
阅读全文
摘要:##题目 ###题解 法一: 按照递归的思维去想: 递归终止条件 递归 返回值 1 如果p、q都不在root为根节点的子树中,返回null 2 如果p、q其中之一在root为根节点的子树中,返回该节点 3 如果p、q都在root为根节点的子树子树中,返回root节点 代码逻辑: 1 如果是遍历到nu
阅读全文
摘要:题目链接 https://codeforces.com/contest/1174/problem/B 题意 给一个数组,只能交换和为奇数的两个数,问最终能得到的字典序最小的序列。 题解 内心OS:由题,只有交换奇偶的操作。(可略:开始觉得那就是奇数序列内部顺序不变,偶数序列内部顺序不变,然后优先队列
阅读全文
摘要:题目链接 http://codeforces.com/problemset/problem/571/B 题意 给数组,得到公式最小值。 题解 由题分成的子数组只有两种长度,每种长度的数组数量也是固定的。那么就是如何分,怎么计算目标值。 易得子数组内部的目标值等于最大值 最小值。 贪心在于原始数组排序
阅读全文
摘要:题目链接 题意 给一个大小写字符串,求最少敲击字符串次数,最开始和最后要求shift都是down的。如日常,大小写转换可以ctrl+z或者shift保持 up/down。 题解 两个dp数组,一个表示当前shift状态是up的最小转换次数,一个表示当前shift状态是down的最小转换次数。最后做处
阅读全文
摘要:题目链接 http://poj.org/problem?id=1050 题意 求最大子矩阵和。 题解 即求二维的最大子段和。二维数组sumRec[I][j]存储原始数组数据rec[0][j] to rec[I][j]。那么sum[k][j] sum[I][j]即表示从I+1到k行的第j列这一列的元素
阅读全文
摘要:题目链接 http://codeforces.com/problemset/problem/664/A 题意 给两个数,找出它们的最大公因子d,使得从a到b之间的数都可以整除d. 题解 结论: 当gcd(a, b) = 1,则gcd(a + b, a) = 1 反证法: 假设gcd(a + b, b
阅读全文
摘要:题目链接 http://codeforces.com/problemset/problem/1009/B 题意 给一个只含0、1、2串,只能做相邻的01交换或者相邻的12交换操作,问经过数次操作(可以是0次)能得到的最小字典序的串是什么。 题解 思维题 关键是把题意理解为:固定0、2的相对位置,往里
阅读全文
摘要:题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1176 题解 DP。因为起点固定,终点随意,所以从终点到起点的顺序dp。 代码 import java.util.Scanner; public class FreePie { static final
阅读全文
摘要:题意 给定一颗二叉树的头节点,已知所有节点的值都不一样,找到含有节点最多的搜索二叉子树,并返回这个树的头节点。 题解 在后序遍历过程中实现。 求解步骤按树形dp中所列步骤。可能性三种:左子树最大、右子树最大、当前节点为根的树。 时间复杂度O(n) 树形dp 使用前提 如果题目求解目标是s规则,则求解
阅读全文
摘要:题意 给定二叉树头结点和targetSum,打印等于targetSum的最长路径长度。 题解 是数组和等于给定值的最长子串长度的二叉树版,思想相同。 在前序遍历的过程中,找到从根节点到当前节点的满足题意的最长长度maxLen。最后得到所有节点对应的maxLen的最大长度。 代码
阅读全文
摘要:题意 给二维矩阵 1、0组成,问从左上角到右下角的最短通路值。 题解 BFS基础。头节点入队;对队内每个节点判断、处理,符合条件的入队;到了终点节点返回。 相关知识 Queue为接口,LinkedList为该接口的一个实现。 代码 public class Main { public static
阅读全文
摘要:判断点在三角形内 四种方法: 1 面积法(由于精度的损失不太方便使用) 2 当点逆时针,分别判断点是否满足在三个向量的左侧 3 对每条边的向量,判断点和三角形剩下的顶点在该向量的同一侧 4 重心法(速度快) 相关知识 两个向量的叉积 向量积可以被定义为: 模长:| c |=| a × b |=| a
阅读全文
摘要:题目链接 http://codeforces.com/problemset/problem/478/D 题意 叠放塔:有红、绿两种色块。从第一层开始,第一层1块,第二层2块,第i层i块。 要求每一层只能用同一种颜色的块。 输入:红块和绿块数目 输出;能叠放出的最高高度h的塔的种数。定义塔某一层的颜色
阅读全文
摘要:HashMap 基本操作 HashMap底层实现 在JDK1.6,JDK1.7中,HashMap采用 位桶+链表 实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。 而JDK1.8中,Hash
阅读全文
摘要:第五章 存储管理 分页技术 分页存储管理的基本概念 页、块的概念 逻辑空间分页:一个进程的逻辑地址空间分成等大小的部分,叫做页。 内存空间分块:内存(物理存储空间)分为等大小的部分,叫做块。 页表、块表的作用 页表:页表的作用是实现页号到物理块号的地址映射。(页表放在cache中叫快表,页表放在内存
阅读全文
摘要:题意 给定非递减循环链表的头节点,和一个待插入的值,将其插入循环链表。 题解 遍历一遍,找到插入位置则返回;若没找到,说明插到头节点尾节点间,注意区分插入的是最大值还是最小值,返回的头节点不一样。 代码 public class Main { public static void main(Stri
阅读全文
摘要:题意 把链表分成左右半区,奇数个节点则右半区长一点,重新交叉排列成链表,如下例: 1,2,3,4,5, = 1,3,2,4,5, 1,2,3,4, = 1,3,2,4, 题解 找到分割点,拆开再合并。 代码
阅读全文