- Docker进阶 - 2. Dockerfile 常用保留字简介
Aaron_neil
Linux#Dockerdocker运维linux容器DockerFile
目录1.FROM2.MAINTAINER3.RUN4.EXPOSE5.WORKDIR6.USER7.ENV8.VOLUME9.COPY10.ADD11.CMD12.ENTRYPOINT13.CMD和RUN命令的区别本篇文章的讲解截屏示例基于tomcat的Dockerfile:tomcat/9.0/jdk8/openjdk/Dockerfile1.FROM基础镜像,指当前镜像是基于哪个镜像,指定一个
- axios封装使用
Hui-1018
前端axios
axios配置配置拦截并使用promise封装get和post请求提示:注意部分伪代码,需要根据实际场景做一些修改importaxiosfrom'axios'constservice=axios.create({baseURL:process.env.BASE_API,//api的base_urltimeout:5000//请求超时时间})//请求拦截器service.interceptors.r
- NLP论文速读|chameleon:一个即插即用的组合推理模块Plug-and-Play Compositional Reasoning with Large Language Models
Power2024666
NLP论文速读自然语言处理人工智能机器学习深度学习nlp语言模型
论文速读|Chameleon:Plug-and-PlayCompositionalReasoningwithLargeLanguageModels论文信息:简介:该论文介绍了一个名为Chameleon的人工智能系统,旨在解决大型语言模型(LLMs)在处理复杂推理任务时存在的固有限制,例如无法访问最新信息、使用外部工具以及执行精确的数学和逻辑推理。Chameleon通过插入即用模块增强LLMs,使其
- 关于jvm参数:-XX:SurvivorRatio的坑
关于jvm参数:-XX:SurvivorRatio的坑坑1:-XX:SurvivorRatio表示新生代Eden区域和Survivor区域(From幸存区或To幸存区)的比例,默认为8,表示Eden区域与其中一个Survivor区域的比例为8:1,即Eden区域与From区域与to区域的比例为8:1:1比如设置-Xmn=100m来指定新生代大小的为100M,Eden区域的大小为100M*8/(8+
- BERT 的“池化策略”
AI扶我青云志
bert人工智能深度学习
为什么在BERT的config.json中会出现池化层(pooling)相关的参数。这个问题其实触及了BERT输出与下游任务之间的桥梁设计,也是你理解BERT在实际应用中如何工作的关键环节。首先明确:BERT的原始Transformer模块没有传统的池化层BERT是基于Transformer构建的,Transformer输出的是:sequence_output:Tensorofshape(batc
- Class14参数管理
Morning的呀
深度学习python开发语言
importtorchfromtorchimportnn#定义2个线性层+1个ReLU激活函数net=nn.Sequential(nn.Linear(4,8),nn.ReLU(),nn.Linear(8,1))#输入向量形状为(2,4)X=torch.rand(size=(2,4))#传入网络net(X)#打印第3个模块的参数字典print(net[2].state_dict())#查看第3层的偏
- Class15自定义层
Morning的呀
深度学习pythonpytorch开发语言
importtorchimporttorch.nn.functionalasFfromtorchimportnn#定义类继承自nn.ModuleclassCenteredLayer(nn.Module):#构造函数def__init__(self):#调用父类构造函数super().__init__()#定义前向传播函数defforward(self,X):#每个元素减去整个张量的平均值retur
- Class10代码实现
Morning的呀
深度学习python深度学习pytorch
Class10代码实现importtorchfromtorchimportnnfromd2limporttorchasd2l#定义丢弃法函数#X:输入张量#dropout:丢弃概率(0~1)defdropout_layer(X,dropout):#丢弃概率在0-1之间assert0dropout:对每个位置判断是否保留#float():将布尔类型转换为浮点类型mask=(torch.rand(X.
- 【EF Core】 EF Core 原生SQL查询深度解析
文章目录前言一、基于实体的SQL语句查询1.1通过FromSql实现基于实体的SQL语句查询1.2通过FromSql实现基于实体的储存过程/视图查询1.3FromSql在底层做了些什么1.4参数化的好处1.5LINQ组合1.6FromSqlInterpolated与FromRaw二、执行非查询SQL三、查询标量(非实体)类型的SQL语句总结前言在EFCore中使用原生SQL执行查询本身不是一种常见
- 基于注入的一种状态管理的思路
自然框架
开始尝试做自己的状态管理。上文说了,我们可以定义一个reactive结构的userOnline,然后注入到根组件里面,那么相关的处理函数要怎么办呢?我么可以写一个单独的js文件,然后用import的方式引入进来,然后我们就可以做统一的处理了。js文件如下:import{provide,inject,reactive,readonly}from'vue'importsysUserInfofrom'.
- os.path.join坑的记录
半步江南
importrequestsimportosfromos.pathimportjointar=r"\219\1.html"root=os.getcwd()print(root)file_path=join(str(root),str(tar))print(file_path)输出为D:\workdir\py-dir\crapt_web_siteD:\219\1.html与需要的D:\workdir
- 「Chrome 开发环境快速屏蔽 CORS 跨域限制详细教程」*
Chrome开发环境快速屏蔽CORS跨域限制【超详细教程】为什么需要临时屏蔽CORS?在日常前后端开发中,我们经常会遇到这样的报错:Accesstofetchat'https://api.example.com'fromorigin'http://localhost:3000'hasbeenblockedbyCORSpolicy.或者类似:AccesstoXMLHttpRequestat'http
- 关于ios点击分享自动复制到粘贴板的问题
前言Android系统没有什么特别的要求,实现这个也比较容易。但ios在某些情况下就会出现问题。如果ios是点击之后,请求接口,再把接口的内容赋值给粘贴板肯定行不通,会被ios系统拦截,导致赋值失败或者赋值为空。建议使用第三方库clipboard.js来实现粘贴板赋值将点击的dom设置为一个button最好实现。CopytoclipboardimportClipboardJSfrom'clipbo
- verilator如何实现RTL的仿真(腾讯混元)
Verilator是一个用于将Verilog或SystemVerilogRTL(寄存器传输级)代码转换为C++或SystemC模型的工具,主要用于高性能的功能仿真和验证。它不是像ModelSim或VCS那样的传统事件驱动仿真器,而是通过静态编译的方式将RTL转换为可执行的C++代码,从而实现高效仿真。下面详细介绍Verilator实现RTL仿真的流程与实现细节。一、Verilator的基本工作流程
- Chrome 开发环境屏蔽 CORS 跨域限制
可缺不可滥
前端其它常备技能chrome前端
Chrome开发环境屏蔽CORS跨域限制为何要屏蔽CORS跨域Chrome临时关闭CORS跨域报错注意事项跨域的其他处理方式为何要屏蔽CORS跨域日常开发过程中,经常会遇到请求接口如下的报错问题Accesstofetchat'https://xxx'fromorigin'http://localhost:4221'hasbeenblockedbyCORSpolicy.有好些解决CORS跨域问题的方
- 用SQL语句查看Oracle数据表的结构信息
bboy枫亭
Oracleoracle
文章目录获取所有表的列表查看表结构查看某表的注释查看某表的字段注释获取所有表的列表相知道相应用户下有哪些表,可以通过以下SQL语句进行查询selecttable_namefromuser_tables;//当前用户的表selecttable_namefromall_tables;//所有用户的表selecttable_namefromdba_tables;//包括系统表selecttable_na
- oracle查询数据结构滤涉及的sql语句
胡斌附体
oraclesql数据结构
背景:去客户数据库查询表数据。了解表结构以及表字段及索引等信息oracle数据库SELECTt.OWNERAS"用户名",t.TABLE_NAMEAS"表名",c.COMMENTSAS"表说明"FROMALL_TABLEStLEFTJOINALL_TAB_COMMENTScONt.OWNER=c.OWNERANDt.TABLE_NAME=c.TABLE_NAMEANDc.TABLE_TYPE='T
- python+playwright 学习-91 cookies的获取保存删除相关操作
上海-悠悠
playwrightpython
前言playwright可以获取浏览器缓存的cookie信息,可以将这些cookies信息保存到本地,还可以加载本地cookies。获取cookies相关操作在登录前和登录后分别打印cookies信息,对比查看是否获取成功。fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browser=p.chromium.
- python request 获取cookies value值的方法
dianqianwei8752
pythonc/c++
importrequestsres=requests.get(url)cookies=requests.utils.dict_from_cookiejar(res.cookies)print(cookies[key])转载于:https://www.cnblogs.com/VseYoung/p/python_cookies.html
- Python一次性批量下载网页内所有链接
Zhy_Tech
python前端开发语言
需要下载一个数据集,该数据集每一张图对应网页内一条链接,如下图所示。一开始尝试使用迅雷,但是迅雷一次性只能下载30条链接。采用Python成功实现一次性批量下载。importosimportrequestsfrombs4importBeautifulSoup#目标网页的URLurl="https://"#请将此处替换为实际的网页URL#指定下载文件的文件夹路径#使用原始字符串download_fo
- 用 K-means 算法实现水果分堆
wh_xia_jun
AI+医疗算法kmeans机器学习
先看运行效果:importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.clusterimportKMeans#生成模拟数据(两个高斯分布的混合点集)np.random.seed(42)X1=np.random.randn(100,2)+np.array([2,2])#第一簇数据,中心在(2,2)X2=np.random.randn(100,2)
- BSCAN 在糖尿病患者数据聚类分析中的应用
wh_xia_jun
AI+医疗机器学习支持向量机人工智能
完整代码:importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.clusterimportDBSCANfromsklearn.preprocessingimportStandardScalerfromsklearn.datasetsimportmake_blobs#设置随机种子,确保结果可复现np.random.seed(42)#1.生成模拟
- 解决Error: Not Found:Page[5][-1,81] at view.umd.min.js
二七狂人
uniapp前端javascriptuniappvue
场景说明:uniapp使用组件,在APP环境出现,在H5环境正常。单页面上多处使用该组件,使用同名参数设置数据,应用切换效果时,触发请求不同接口,返回数据格式不同。使用v-if时出现,使用v-show时正常。原因分析:尚不明确。解决方案1:将组件注册多个不同名称来使用,对应不同的返回数据。importvTabsfrom"@/components/v-tabs.vue"importvTabs1fro
- mysql+explain怎么看_MySQL学习----explain查看一条sql 的性能
安123
在开发的过程中,对于我们写的sql语句,我们有时候会考虑sql语句的性能,那么explain就是首选。Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。Explain语法:explainselect…from…[where...]例如:expl
- PyQt4 -- 设置系统托盘显示
agoodob
PyQt4import文档qt
文章转载请著名出处。这篇文章教大家写PyQt4程序的时候如何设置程序在系统托盘区域显示图标系统托盘指的是这块区域:(笔者用的是window7)直接上源码:fromPyQt4importQtGuiimportsysapp=QtGui.QApplication(sys.argv)w=QtGui.QWidget()w.resize(250,150)w.move(300,300)w.setWindowTi
- 【论文蒸馏】Recent Advances in Speech Language Models: A Survey
Greener_Pat
论文蒸馏语言模型人工智能AudioLM
AbstractLLM蓬勃发展,但从交互的自然性上看语音大模型(SpeechLM)有巨大的发展空间。直接的方法是ASR(语音转文字)+LLM+TTS(文字转语音),但是这样有其固有的限制,而端到端的SpeechLM表现更好,本文及其方法论做了一个概览的综述1.Introduction大语言模型提供了强大的AI基础支架,在其它领域有着广泛应用。但交互上不自然,所以需要声学大模型。一种直接的实现方式是
- Postgres中窗口函数lag以lead
午天
it数据库postgrespostgres窗口函数数据库lag函数
sql中我们经常会用到聚合函数,聚合之后它会减少数据量,但是如果我们想把聚合之后的数据和原始数据同时展示出来,那么我们需要用到窗口函数。lag窗口函数通过条件把数据划分成子类,在子类中进行排序窗口函数的通用写法selectname,orderdate,cost,sum(cost)over(partitionbyextract(monthfromorderdate)orderbyorderdate)
- PyQt6基础_pyqtgraph_横向柱状图
程序猿与金融与科技
PyQt6基础PyQt6pyqtgraph
效果:效果图显示的是2025Q1申万行业1,各行业的总资产柱状图代码:#-*-coding:utf-8-*-importnumpyasnpfromPyQt6.QtGuiimport(QColor)fromPyQt6.QtWidgetsimport(QApplication)importpyqtgraphaspgclassGraphHorizonalBarWidget(pg.PlotWidget):
- PyQt6基础_pyqtgraph_双Y轴不同周期数据叠加
程序猿与金融与科技
PyQt6基础PyQt6pyqtgraph
效果:双Y轴,左轴对应曲线总市值;右轴对应柱状图总营收。市值数据为月数据,营收数据为季度数据,两者时间区间一致。代码:#-*-coding:utf-8-*-importpandasaspdimportnumpyasnpfromPyQt6.QtWidgetsimport(QApplication)importpyqtgraphaspgclassStrAxisItem(pg.AxisItem):def
- Jenkins集成Gitlab流水线
大唐雷恋
参考这篇文章就够了https://www.zxblinux.com/archives/665另外,备注下流水线的配置:pipeline{agentanystages{stage('GitPull'){steps{echo'Updatesourcefromgitlab...'checkout([$class:'GitSCM',branches:[[name:'*/develop']],doGener
- C/C++Win32编程基础详解视频下载
择善Zach
编程C++Win32
课题视频:C/C++Win32编程基础详解
视频知识:win32窗口的创建
windows事件机制
主讲:择善Uncle老师
学习交流群:386620625
验证码:625
--
- Guava Cache使用笔记
bylijinnan
javaguavacache
1.Guava Cache的get/getIfPresent方法当参数为null时会抛空指针异常
我刚开始使用时还以为Guava Cache跟HashMap一样,get(null)返回null。
实际上Guava整体设计思想就是拒绝null的,很多地方都会执行com.google.common.base.Preconditions.checkNotNull的检查。
2.Guava
- 解决ora-01652无法通过128(在temp表空间中)
0624chenhong
oracle
解决ora-01652无法通过128(在temp表空间中)扩展temp段的过程
一个sql语句后,大约花了10分钟,好不容易有一个结果,但是报了一个ora-01652错误,查阅了oracle的错误代码说明:意思是指temp表空间无法自动扩展temp段。这种问题一般有两种原因:一是临时表空间空间太小,二是不能自动扩展。
分析过程:
既然是temp表空间有问题,那当
- Struct在jsp标签
不懂事的小屁孩
struct
非UI标签介绍:
控制类标签:
1:程序流程控制标签 if elseif else
<s:if test="isUsed">
<span class="label label-success">True</span>
</
- 按对象属性排序
换个号韩国红果果
JavaScript对象排序
利用JavaScript进行对象排序,根据用户的年龄排序展示
<script>
var bob={
name;bob,
age:30
}
var peter={
name;peter,
age:30
}
var amy={
name;amy,
age:24
}
var mike={
name;mike,
age:29
}
var john={
- 大数据分析让个性化的客户体验不再遥远
蓝儿唯美
数据分析
顾客通过多种渠道制造大量数据,企业则热衷于利用这些信息来实现更为个性化的体验。
分析公司Gartner表示,高级分析会成为客户服务的关键,但是大数据分析的采用目前仅局限于不到一成的企业。 挑战在于企业还在努力适应结构化数据,疲于根据自身的客户关系管理(CRM)系统部署有效的分析框架,以及集成不同的内外部信息源。
然而,面对顾客通过数字技术参与而产生的快速变化的信息,企业需要及时作出反应。要想实
- java笔记4
a-john
java
操作符
1,使用java操作符
操作符接受一个或多个参数,并生成一个新值。参数的形式与普通的方法调用不用,但是效果是相同的。加号和一元的正号(+)、减号和一元的负号(-)、乘号(*)、除号(/)以及赋值号(=)的用法与其他编程语言类似。
操作符作用于操作数,生成一个新值。另外,有些操作符可能会改变操作数自身的
- 从裸机编程到嵌入式Linux编程思想的转变------分而治之:驱动和应用程序
aijuans
嵌入式学习
笔者学习嵌入式Linux也有一段时间了,很奇怪的是很多书讲驱动编程方面的知识,也有很多书将ARM9方面的知识,但是从以前51形式的(对寄存器直接操作,初始化芯片的功能模块)编程方法,和思维模式,变换为基于Linux操作系统编程,讲这个思想转变的书几乎没有,让初学者走了很多弯路,撞了很多难墙。
笔者因此写上自己的学习心得,希望能给和我一样转变
- 在springmvc中解决FastJson循环引用的问题
asialee
循环引用fastjson
我们先来看一个例子:
package com.elong.bms;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import co
- ArrayAdapter和SimpleAdapter技术总结
百合不是茶
androidSimpleAdapterArrayAdapter高级组件基础
ArrayAdapter比较简单,但它只能用于显示文字。而SimpleAdapter则有很强的扩展性,可以自定义出各种效果
ArrayAdapter;的数据可以是数组或者是队列
// 获得下拉框对象
AutoCompleteTextView textview = (AutoCompleteTextView) this
- 九封信
bijian1013
人生励志
有时候,莫名的心情不好,不想和任何人说话,只想一个人静静的发呆。有时候,想一个人躲起来脆弱,不愿别人看到自己的伤口。有时候,走过熟悉的街角,看到熟悉的背影,突然想起一个人的脸。有时候,发现自己一夜之间就长大了。 2014,写给人
- Linux下安装MySQL Web 管理工具phpMyAdmin
sunjing
PHPInstallphpMyAdmin
PHP http://php.net/
phpMyAdmin http://www.phpmyadmin.net
Error compiling PHP on CentOS x64
一、安装Apache
请参阅http://billben.iteye.com/admin/blogs/1985244
二、安装依赖包
sudo yum install gd
- 分布式系统理论
bit1129
分布式
FLP
One famous theory in distributed computing, known as FLP after the authors Fischer, Lynch, and Patterson, proved that in a distributed system with asynchronous communication and process crashes,
- ssh2整合(spring+struts2+hibernate)-附源码
白糖_
eclipsespringHibernatemysql项目管理
最近抽空又整理了一套ssh2框架,主要使用的技术如下:
spring做容器,管理了三层(dao,service,actioin)的对象
struts2实现与页面交互(MVC),自己做了一个异常拦截器,能拦截Action层抛出的异常
hibernate与数据库交互
BoneCp数据库连接池,据说比其它数据库连接池快20倍,仅仅是据说
MySql数据库
项目用eclipse
- treetable bug记录
braveCS
table
// 插入子节点删除再插入时不能正常显示。修改:
//不知改后有没有错,先做个备忘
Tree.prototype.removeNode = function(node) {
// Recursively remove all descendants of +node+
this.unloadBranch(node);
// Remove
- 编程之美-电话号码对应英语单词
bylijinnan
java算法编程之美
import java.util.Arrays;
public class NumberToWord {
/**
* 编程之美 电话号码对应英语单词
* 题目:
* 手机上的拨号盘,每个数字都对应一些字母,比如2对应ABC,3对应DEF.........,8对应TUV,9对应WXYZ,
* 要求对一段数字,输出其代表的所有可能的字母组合
- jquery ajax读书笔记
chengxuyuancsdn
jQuery ajax
1、jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()
- JWFD工作流拓扑结构解析伪码描述算法
comsci
数据结构算法工作活动J#
对工作流拓扑结构解析感兴趣的朋友可以下载附件,或者下载JWFD的全部代码进行分析
/* 流程图拓扑结构解析伪码描述算法
public java.util.ArrayList DFS(String graphid, String stepid, int j)
- oracle I/O 从属进程
daizj
oracle
I/O 从属进程
I/O从属进程用于为不支持异步I/O的系统或设备模拟异步I/O.例如,磁带设备(相当慢)就不支持异步I/O.通过使用I/O 从属进程,可以让磁带机模仿通常只为磁盘驱动器提供的功能。就好像支持真正的异步I/O 一样,写设备的进程(调用者)会收集大量数据,并交由写入器写出。数据成功地写出时,写入器(此时写入器是I/O 从属进程,而不是操作系统)会通知原来的调用者,调用者则会
- 高级排序:希尔排序
dieslrae
希尔排序
public void shellSort(int[] array){
int limit = 1;
int temp;
int index;
while(limit <= array.length/3){
limit = limit * 3 + 1;
- 初二下学期难记忆单词
dcj3sjt126com
englishword
kitchen 厨房
cupboard 厨柜
salt 盐
sugar 糖
oil 油
fork 叉;餐叉
spoon 匙;调羹
chopsticks 筷子
cabbage 卷心菜;洋白菜
soup 汤
Italian 意大利的
Indian 印度的
workplace 工作场所
even 甚至;更
Italy 意大利
laugh 笑
m
- Go语言使用MySQL数据库进行增删改查
dcj3sjt126com
mysql
目前Internet上流行的网站构架方式是LAMP,其中的M即MySQL, 作为数据库,MySQL以免费、开源、使用方便为优势成为了很多Web开发的后端数据库存储引擎。MySQL驱动Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常用的有如下几种:
http://code.google.c...o-mysql-dri
- git命令
shuizhaosi888
git
---------------设置全局用户名:
git config --global user.name "HanShuliang" //设置用户名
git config --global user.email "
[email protected]" //设置邮箱
---------------查看环境配置
git config --li
- qemu-kvm 网络 nat模式 (四)
haoningabc
kvmqemu
qemu-ifup-NAT
#!/bin/bash
BRIDGE=virbr0
NETWORK=192.168.122.0
GATEWAY=192.168.122.1
NETMASK=255.255.255.0
DHCPRANGE=192.168.122.2,192.168.122.254
TFTPROOT=
BOOTP=
function check_bridge()
- 不要让未来的你,讨厌现在的自己
jingjing0907
生活 奋斗 工作 梦想
故事one
23岁,他大学毕业,放弃了父母安排的稳定工作,独闯京城,在家小公司混个小职位,工作还算顺手,月薪三千,混了混,混走了一年的光阴。 24岁,有了女朋友,从二环12人的集体宿舍搬到香山民居,一间平房,二人世界,爱爱爱。偶然约三朋四友,打扑克搓麻将,日子快乐似神仙; 25岁,出了几次差,调了两次岗,薪水涨了不过百,生猛狂飙的物价让现实血淋淋,无力为心爱银儿购件大牌
- 枚举类型详解
一路欢笑一路走
enum枚举详解enumsetenumMap
枚举类型详解
一.Enum详解
1.1枚举类型的介绍
JDK1.5加入了一个全新的类型的”类”—枚举类型,为此JDK1.5引入了一个新的关键字enum,我们可以这样定义一个枚举类型。
Demo:一个最简单的枚举类
public enum ColorType {
RED
- 第11章 动画效果(上)
onestopweb
动画
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
- Eclipse中jsp、js文件编辑时,卡死现象解决汇总
ljf_home
eclipsejsp卡死js卡死
使用Eclipse编辑jsp、js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲。将所有用过的方法罗列如下:
1、取消验证
windows–>perferences–>validation
把 除了manual 下面的全部点掉,build下只留 classpath dependency Valida
- MySQL编程中的6个重要的实用技巧
tomcat_oracle
mysql
每一行命令都是用分号(;)作为结束
对于MySQL,第一件你必须牢记的是它的每一行命令都是用分号(;)作为结束的,但当一行MySQL被插入在PHP代码中时,最好把后面的分号省略掉,例如:
mysql_query("INSERT INTO tablename(first_name,last_name)VALUES('$first_name',$last_name')");
- zoj 3820 Building Fire Stations(二分+bfs)
阿尔萨斯
Build
题目链接:zoj 3820 Building Fire Stations
题目大意:给定一棵树,选取两个建立加油站,问说所有点距离加油站距离的最大值的最小值是多少,并且任意输出一种建立加油站的方式。
解题思路:二分距离判断,判断函数的复杂度是o(n),这样的复杂度应该是o(nlogn),即使常数系数偏大,但是居然跑了4.5s,也是醉了。 判断函数里面做了3次bfs,但是每次bfs节点最多