存储传输数据——XML
XML 入门
XML的主要作用
用来保存数据,将数据与表现分离
项目或者模块的配置文件
可以作为网络传输数据的格式(现在以JSON为主)
元素(标签)
大致格式与html类似
标签名由字母数字或其他字符组成大小写敏感可以包含中文但不能包含空格
标签有属性,分为基本属性与事件属性(XML对属性的解析不太友好所以尽量用元素代替属性的表示)
文本域
<![CDATA[ ]]> 在第二层中括号中写下的值会被当成纯文本执行即不用担心特殊字符的困扰
语法要求
XML 文档必须有一个根元素
XML元素都必须有一个关闭标签
XML 标签对大小写敏感
XML 元素必须被正确的嵌套
XML 属性值必须加引号
XML解析技术
xml文件可以用类似html的DOM技术来解析
sun公司对XML在JDK5中对dom技术升级为sax技术(simple APL for XML)通过一行一行读取解析的技术提高了内存与性能
第三方解析:
jdom在dom基础上进行了封住
dom4j对jdom进行了封装
pull主要用于Android手机开发,其使用类似sax的机制解析xml
在Ja ...
JQuery事件操作
jQuery中的时间处理方法
click() 绑定或触发单击事件
mouseover() 鼠标覆盖事件
mouseout() 鼠标移出事件
bind() 可以给元素一次性绑定一个或多个多个事件(多个事件绑定同一个方法)
unbind() 解除事件的绑定
one() 使用和 bind() 方法一致但是 one() 方法每个绑定的事件只会对对应操作响应一次
live() 绑定事件,绑定所有选择器匹配到的所有标签对象,哪怕是后期动态创建的也会有效(即每次都会从新筛选标签对象)
jQuery中事件的冒泡
事件的冒泡是指父子元素同时绑定了某个事件时,对子元素实现该事件时父元素也会响应相应事件(即对子元素实现点击操作对父元素来说也相当于实现了点击操作)
需要在子元素的事件响应的函数中结尾使用 return false 来阻止事件的冒泡传递
JavaScript事件对象
原生js获取事件对象:
在function() 的参数列表中添加参数,即可获取,例如:XXX.onclick() = function(event){} 中 event 即表示事件对象
jQuery获取事件对象: ...
JQuery样式修改和动画展示
jQuery对CSS 样式操作
addClass() 添加样式
removeClass() 删除样式
toggleClass() 有就删除,没有就添加样式
offset() 获取和设置元素的坐标
jQuery动画
基本动画:
show() 将隐藏的元素显示
hide() 将可见的元素隐藏
toggle() 切换元素的可见状态
淡入淡出:
fadeIn() 淡入
fadeOut() 淡出
fadeTo() 将透明度调整的固定值(0~1)
fadeToggle() 切换元素淡入淡出状态
基本动画都可以通过添加参数实现更多的动画效果
可以添加动画执行的时长(单位为ms),基本动画是通过调整元素的长宽实现show()和hide()的
动画执行完成后的回调函数(动画结束后自动调用的函数)
JQuery对标签内容和属性增删改查
设置和获取标签内容和属性
html() 含参时表示设置,不含参时表示获取内容,与dom属性 innerHTML() 一样
text() 同 html() 但只获取标签内文本,与dom属性innerText() 一样
val() 可以设置和获取表单项的value属性,与dom属性 value() 一样
attr() 可以获取和设置属性值,但不太适合对像 checked 、readOnly、 selected、 disabled 等属性(因为得到的内容不够直观),attr() 方法还可以对非官方定义的一些属性进行操作
prop() 可以获取和设置属性值,但只推荐对 attr() 函数不太适合使用的属性进行操作
dom的增删改
增:
appandTo() 内部插入, a.appandTo(b) 表示把a插入到b中成为b的最后一个子元素
prependTo() 内部插入, a.prependTo(b) 表示把a插入到b中成为b的第一个子元素
insertAfter() 外部插入,a.insertAfter(b) 表示a插入到b的后面成为其的同级(兄弟)元素
insertBefore() 外 ...
字符串匹配 KMP 算法
KMP算法
作用:将原本暴力查找子串的时间复杂度由 O(m×n)O_{(m\times n)}O(m×n) 降为接近 O(n)O_{(n)}O(n)
实现:
创建子串的下标转移索引
首先模板字符串的0号位置后面不能构成后缀故不存在下标转移,故置为-1
模板字符串的焦点已近移动到了第 i−1i-1i−1 位且成功匹配了长度为 jjj 的前缀,即确认了 p[0 ~ j-1] 与 p[i-j ~ i-1] 完全匹配后
如果模板字符串的第 iii 位与第 jjj 位匹配,则说明当前匹配字符串可以加1
如果不匹配,则需要将当前位置不能匹配更长的子串了需要将匹配长度缩短,这时可以使用已经建立好的匹配下标索引转移 ne[j] 即可确定缩短后的匹配字符串可以最大匹配
此时重复步骤3-4直到匹配可以确认p[i]的匹配长度或者当前无法找到匹配的子串即匹配长度为-1
查找子串
此时只需要将匹配的字符串从原来的模板字符串转化为目标字符串即可
代码:
123456789101112131415161718192021222324252627282930#include<iostrea ...
单调栈和单调队列
单调栈
适用问题:处理给定数列确认每个数的左(右)边第一个比它小(大)的数
例如: LeetCode 84. 柱状图中最大的矩形 和 LeetCode 42. 接雨水
原子问题:给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数的下标(从0开始标号),如果不存在则输出 −1。
实现:
遍历数组,当遍历到第 iii 个数 xix_ixi 时,查看栈顶元素
如果栈顶元素大于或等于 xix_ixi 也意味着栈顶元素与 xix_ixi 相比毫无优势,因为 xix_ixi 离未遍历到的元素距离与当前栈顶元素相比都要更近,并且其值也满足比栈顶元素更具优势,即栈顶元素当前一定不会被后面的元素匹配上
继续重复过程以弹出栈中不比 xix_ixi 小的老旧值(淘汰老人,残酷的羚羊飞渡)这样一来栈顶永远放着 最新但不小 的值
这时如果栈为空即在其左方找不到比 xix_ixi 小的数输出为-1,否则输出栈顶元素
将 xix_ixi 压如栈顶
重复此过程得到的栈是单调递增的即栈是升序排列的故称之为单调栈
单调队列
适用问题:查找可滑动窗口内的最大值与最小值(俗称滑动窗口问题)
...
前缀和思维求金字塔个数
原题链接:LeetCode 5925. 统计农场中肥沃金字塔的数目
解题思路:
利用前缀和的思维,创建一个存储按行连续的 “1” 的个数的矩阵
按分别按 “右下”和 “右上” 方向走步,代表着金字塔的层次增加
符合构成金字塔的条件是当前金字塔的最右方拥有至少拥有 2*层数-1 个连续的 “1”
复杂度分析:
时间复杂度:三层循环 O(m2n)O_{(m^2n)}O(m2n)
空间复杂度:使用前缀和数组 O(m×n)O_{(m\times n)}O(m×n) ,利用原数组grid创建前缀和数组 O(1)O_{(1)}O(1)
代码:
123456789101112131415161718192021222324252627282930313233class Solution {public: int countPyramids(vector<vector<int>>& grid) { int len_g = grid.size(), len_v = grid[0].size(); int n ...
数学部分基础 (2)
欧拉函数
欧拉函数的定义
欧拉函数 ϕ(n)\phi(n)ϕ(n) 是指从1~n中与n互质的数的个数 例如:ϕ(1)=1\phi(1) = 1ϕ(1)=1, ϕ(5)=4\phi(5) = 4ϕ(5)=4 , ϕ(6)=2\phi(6) = 2ϕ(6)=2
朴素法求欧拉函数
若 n = ρ1α1 × ρ2α2 × ... ×ρnαn\rho_1^{\alpha_1} \ \times \ \rho_2^{\alpha_2}\ \times \ ... \ \times \rho_n^{\alpha_n}ρ1α1 × ρ2α2 × ... ×ρnαn
则 ϕ(n) = n (1−1ρ1) (1−1ρ2) ... (1−1ρn)\phi(n) \ = \ n \ (1- \frac{1}{\rho_1}) \ (1- \frac{1}{\rho_2}) \ ... \ (1- \frac{1}{\rho_n})ϕ(n) = n (1−ρ11) (1−ρ21) ... (1−ρn1)
原理:容斥原理
解释:
先吧n个数中 $\rho_1 \ , \ \ ...
Git学习入门
Git 入门
Git基础了解
Git是区别于集中式版本控制的分布式版本控制工具
使用工具: Idea
三个常用平台:GitHub、Gitee 码云、GitLab
GitHub基于外网的 规模最大的git平台(由git创始人开发)
Gitee基于国内互联网的 代码开源平台
GitLab基于局域网的平台 非开源内部使用
常用命令:
创建远程库
代码推送 Push
代码拉取 Pull
代码克隆 Clone
需要掌握:
SSH免密登录
Idea 集成 Github 和 Gitee码云
Git的工作机制
工作区 – git add --> 暂存区 – git commit --> 本地库 – git push --> 远程库
工作区和暂存区的代码是受本地掌控的,一旦上传到了本地库就无法再轻易删除了
Git的命令
命令名
作用
git config --global user.name 用户名
设置用户签名
git config --global user.email 邮箱
设置用户签名
git init
初始化本地库
git ...
数学部分基础(3)
高斯消元
高斯方程的作用
在 O(n3)O_{(n^3)}O(n3) 的时间复杂度内解决一个含有n个未知量的线性方程组
\left\{
\begin{array}{**lr**}
\ a_{1 1}\,x_1 + a_{1 2}\,x_2 + \; ... \; +a_{1 n}\,x_n = b_1 , \\
\ a_{2 1}\,x_1 + a_{2 2}\,x_2 + \; ... \; +a_{2 n}\,x_n = b_2 , \\
\ ..........\\
\ a_{n 1}\,x_1 + a_{n 2}\,x_2 + \; ... \; +a_{n n}\,x_n = b_n ,
\end{array}
\right.
方程解的情况:无解, 无穷多解, 唯一解
高斯消元的步骤
将系数矩阵 (n行,n+1列) 转化为 “对角线矩阵” 的过程
为了出于精度考虑第一次消的时候要用系数绝对值最大的数置为零后去消其他行的数
核心代码:
123456789101112131415161718192021222324252627282930313233 ...

.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)