0%

资料地址:链接: https://pan.baidu.com/s/1qWchSZDzCcsyPZhUvELXxQ 密码: pi11

1 软件项目管理概述

实现项目目标的制约因素有(项目范围)、(成本)、(进度计划)、(客户满意度)

项目管理包括(启动过程组)、(计划过程组)、(执行过程组)、(控制过程组)、(收尾过程组) 5 个过程组

项目的特征是: 目标性、相关性、临时性、独特性、资源约束性、不确定性

项目:项目是一系列具有特定目标 , 有明确开始和终止日期,资金有限,消耗资源的活动和任务。

项目管理知识体系( PMBOK )包括哪 10 个知识领域

项目集成管理、项目范围管理、项目时间管理、项目成本管理、项目质量管理、项目人力资源管理、项目沟通管理、项目风险管理、项目 采购管理、项目干系人管理

2021 05 21 10 11 08屏幕截图

项目管理实施的四大挑战

1 项目定义中的问题

2 项目组织实施中的问题

3 项目控制中的问题

4 项目评价中的问题

2021 05 18 19 32 55屏幕截图

第一篇 项目初始

2 项目确立

项目立项之后,项目负责人会进行(自造 - 购买)决策,确定待开发产品的哪些部分应该采购、外包开发、自主研发等

项目经理的主要责任是(开发计划)、(组织实施)、(项目控制)

在招投标阶段,甲方过程包括(招标书定义)、(供方选择)、(合同签署),乙方过程包括(项目分析)、(竞标)、(合同签署)。

3 生存期模型

( 1 ) 瀑布模型

适用于软件需求很明确的软件项目,即一般适用于功能明确、完成、无重大变化的软件系统的开发,即:

1) 在项目开始前,项目的需求已经被很好的理解、也很明确,而且项目经理很熟悉为实现这一模型所需要的过程。

2) 解决方案在项目开始前也很明确。

3) 短期项目可采用瀑布模型。

( 2 ) V 模型

适用于项目需求在项目开始前很明确、解决方案在项目开始前也很明确,项目对系统的安全很严格,如航天飞机控制系统、公司的财务系统等。

( 3 ) 快速原型模型

适用于项目的需求在项目开始前不明确,需要减少项目的不确定性的时候。

敏捷开发通过 迭代快速用户反馈 应对管理的不确定性和变更

第二篇 项目计划

4 软件项目范围计划——需求管理

需求管理包括 需求获取 、 需求分析 、 需求规格编写 、 需求验证 、 需求变更 5 个过程

原型分析方法 是其中一种需求建模方法

5 软件项目范围计划——任务分解

任务分解是将一个项目分解为更多的工作细目或者 子项目 ,是项目变得更小、更易管理、更易操作。

一般来说,进行项目分解时,可以采用 清单图表两种形式来表达任务分解的结果。

WBS 的全称是 任务分解结构 Work Breakdown Structure

WBS 最底层次交付成果是 工作包 work package

试写出任务分解的方法 和 步骤。

答:任务分解的基本步骤:

1) 确认并分解项目的组成要素 (WBS编号) 。

2) 确定分解标准,按照项目实施管理的方法分解,而且分解的标准要统一。

3) 确认分解是否详细,是否可以作为费用和时间估计的标准,明确责任。

4) 确定项目交付成果 (可以编制WBS字典) 。

5) 验证分解正确性。验证分解正确后,建立一套编号系统。

任务分解方法:

1) 模板参照方法

2) 类比方法

3) 自上而下

4) 自下而上

检验任务分解结果的标准有:

1)最底层的要素是否是实现目标的充分必要条件

2)最底层要素是否有重复的

3)每个要素是否清晰完整定义

4)最底层要素是否有定义清晰的责任人

5)是否可以进行成本估算和进度安排

6 软件项目成本计划

软件项目成本包括直接成本间接成本,一般而言,项目人力成本归属于直接成本。

在项目初期,一般采用的成本估算方法是 类比估算法

功能点方法中 5 类功能组件的计数项是 外部输入外部输出外部查询内部逻辑文件外部接口 文件

用例点方法通过分析用例角色场景技术与环境因子等来进行软件估算

7 软件项目进度计划

关键路径 决定了项目在给定的金钱关系和资源条件下完成项目所需的最短时间。

应急法 和 平行作业法 都是时间压缩法

任务(活动)之间的排序依据主要有 强制性依赖关系软逻辑关系外部依赖关系

工程评估评审技术采用加权平均的公式是 PERT 历时 =(O+P+4M)/6 ,其中 O 是乐观值, P 是悲观值, M 是最可能值。

CPM : 即关键路径法 (Critical Path Method ),又称关键线路法,最早出现于 20 世纪 50 年代,是一种计划管理方法,它是通过分析项目过程中哪个活动序列进度安排的总时差最少来预测项目工期的网络分析。

PERT : Program Evaluation Review Technique 计划评审技术, 是一种任务工期估算的图示法。

软件项目中任务之间的四种关系

结束 - 开始:表示 A 任务(活动)在 B 任务(活动)开始前结束。

开始 - 开始:表示 A 任务(活动)开始, B 任务(活动)才可以开始。

结束 - 结束:表示 A 任务(活动)结束, B 任务(活动)才可以结束。

开始 - 结束:表示 A 任务(活动)开始, B 任务(活动)才能结束。

时间)是一种特殊的资源,以其单向性,不可重复性,不可替代性而有别于其他资源。

表示甘特图有两种方式,一种是(棒状图),另一种用三角形表示,其中空心表示计划时间,实心表示实际时间

里程碑事件往往是一个时间要求为零的任务,就是说它并非是一个要实实在在完成的任务,而是一个标志性的事件

8 软件项目质量计划

软件质量模型是一个衡量软件整体质量效果的度量标准

​   Boehm质量模型

​   McCall质量模型 (产品修改,产品转移,产品运行)

​ ISO/IEC 9126质量模型

审计)是对过程或产品的一次独立质量评估。

质量成本包括预防成本和(缺陷成本

质量管理包括(软件质量计划)、(软件质量保证)、(软件质量控制)等过程。

(软件质量)是软件满足明确说明或者隐含的需求的程度

质量保证的主要活动是(项目执行过程审计)和(项目产品审计)

简述质量保证与质量控制的关系。

答:质量保证( QA )是通过评价项目整体绩效 , 建立对质量要求的信任,提供项目和产品可视化的管理报告。这个任务本身并不能提高产品的质量, 但是通过质量保证的一系列工作可以间接地提高产品的质量。 质量保证一般由质量保证部门人员实施。

质量控制( QC )是确定项目结果与质量标准是否相符 , 同时 , 确定消除不符的原因和方法,它控制产品的质量,及时纠正缺陷。这个任务本身提高产品的质量,一般由开发人员实施。

质量保证是后期质量活动,质量控制是前期质量活动。 它们 是有区别的 : 质量保证是针对项目实施过程的管理手段,质量控制是针对项目产品的技术手段 ; 实施质量保证是针对过程改进和审计的,强调的是过程改进和信心保证。实施质量控制是按照质量要求,检查具体可交付成果的质量,强调的是具体的可交付成果。

9 软件配置管理计划

配置管理最终保证软件产品的(完整性)、(一致性)、(追溯性)、(可控性)。

( 完整性和可跟踪性 )是软件配置管理的核心功能。

基线)标志开发过程中一个阶段的结束和里程碑。

基线是经过评审和批准的配置项的集合,其作用是明确划分项目各阶段,确定各阶段的结束点

基线变更控制包括(变更请求)、(变更控制)、( 变更批准 / 拒绝 )、(变更实现)等步骤。

版本管理)、(变更管理)是配置管理的主要功能。

基线变更时,需要经过( SCCB )授权。

SCCB 的全称是( 软件配置控制委员会 )。

写出配置管理的基本过程。

( 1 ) 配置项标识、跟踪 ;( 2 ) 配置管理环境建立 ;( 3 ) 基线变更管理 ;( 4 ) 配置管理审计 ;( 5 ) 配置状态统计 ;( 6 ) 配置管理计划 。

说明软件配置控制委员会( SCCB )的基本职责。

答: 评估变更 、 批准变更申请 、 在生存期内规范变更申请流程 、 对变更进行反馈 、 与项目管理层沟通 。

简述配置管理在软件 开发中的作用 ,并列举至少两种配置管理工具。

答: 软件配置管理是 软件项目管理 的重要内容,也是保证软件质量的重要手段。它能够对软件开发过程进行有效管理和控制,从而实现软件产品的完整性、一致性、可控性,使产品极大程度地与用户需求相吻合。它能够控制、记录、追踪对软件的修改并形成规范文档,方便日后维护和升级,更重要的是能够保护代码资源,积累软件财富,提高 软件重用 率。

配置管理工具有: Harvest 、 Perforce 、 ClearCase 、 PVCS 、 CVS\SVN 、 VSS

写出几个常见的软件配置项。

答:软件项目计划、需求分析结果、软件需求规格说明书、设计规格说明书、源代码清单、测试规格说明书、测试计划、测试用例与实验结果、可执行程序、用户手册、维护文档。

10 软件项目人员与沟通计划

沟通管理的基本原则是 及时性准确性完整性可理解性

可以 充分发挥部门资源优势集中的组织结构为 职能型组织结构

沟通计划用于确定 谁需要信息需要什么信息何时需要信息, 以及 如何将信息分发给他们

组织 结构的主要类型 职能型项目型矩阵型

会议形式 沟通最有可能协助解决复杂的问题。

当项目中有 20 个 人时, 沟通 渠道最多有 190 。20*19/2

写出 5 种以上项目沟通方式

沟通方式主要有书面沟通和口头沟通、语言沟通和非语言沟通、正式沟通和非正式沟通、单向沟通和双向沟通、网络沟通等

矩阵型项目组织结构的优缺点是什么

优点是: 1 、专职的项目经理负责整个项目,以项目为中心,能迅速解决问题。在最短的时间内调配人才,组成一个团队,把不同职能的人才集中在一起。

2 、多个项目可以共享各个职能部门的资源。在矩阵管理中,人力资源得到了更有效的利用,减少了人员冗余。

3 、既有利于项目目标的实现,也有利于公司目标方针的贯彻

4 、项目成员的顾虑减少了,因为项目完成后,他们任然可以回到原来的职能部门,不用担心被解散,而且他们能有更多机会接触自己企业的不同部门。

缺点是 1 、容易引起职能经理和项目经理权利的冲突。

2 、资源共享可能引起项目之间的冲突

3 、项目成员有多位领导,即员工必须要接受双重领导,因此经常有焦虑与压力。

11 软件项目风险计划

12 软件项目合同计划

13 项目集成计划

第三篇 项目执行控制

14 项目集成计划执行控制

15 项目核心计划执行控制

BCWS 计划完成工作成本

ACWP 已完成工作成本

BCWP 已完成工作预算成本

16 项目辅助计划执行控制

第四篇 项目结束

17 项目结束过程

项目目标已经成功实现,可交付成果已经出现;或者项目无法继续进行,这时项目可以 终止 了。

项目结束过程包括 制定结束计划完成收尾工作项目最后评审

是否在预算成本内完成项目是否实现目标是否达到项目客户的期望等都是检验项目成功与失败的标准。

1、 简述甲方合同的验收过程和合同终止过程。

合同验收 过程:

最后验收 过程是甲方对 乙方 交付的产品或服务进行最后的验收检验,以 保证 它 满足 合同条款的要求。甲方 具体 活动描述如下:

1) 根据 需求( 采购 )资料和合同文本制定验收清单

2) 组织 有关人员对验收清单及验收标准进行评审

3) 根据 验收清单及验收标准制定验收计划,并通过 甲乙双方 的确认。

4) 甲乙双方 执行验收计划

5) 处理 验收计划执行中发生的问题。

6) 编写 验收报告。

7) 双方 确定验收问题处理计划,并下达给项目经理执行。

8) 双方 签字认可,完成验收。

合同终止 过程:

当 项目满足结束条件, 合同 管理者 应该 及时 宣布 项目结束 , 终止合同的执行, 并 通过合同终止过程告知各方企业合同终止。甲方 具体活动 描述如下:

1) 按照 企业 文档 管理规范将 相关合同 文档 归档 。

2) 合同 管理者 向 有关人员 通知 合同 终止 。

3) 起草 项目总结报告。

在 项目的 末期 , 与 乙方的合同如果还有尚未解决的索赔,项目经理可以在合同 收尾 之后,采取法律行动。

2、 项目收尾时应该完成哪些任务?

1) 范围确认 。

2) 质量验收 。

3) 产品交付 。

4) 费用决算 。

5) 项目文档验收 。

1. HEXO 博客部署失败

github提示Unable to build page. Please try again later

前几天执行hexo d部署博客后,github发邮件提醒,试了很多办法,就差重新搭建了,都没有解决问题。

今天简单操作了一下,方法就是在github目录下加一个空文件 .nojekyll ,注意是在github目录下直接加,之前在本地Blog目录加并不起作用

添加后查看github setting-pages

2021 05 18 16 52 01屏幕截图

这样就成功部署了

2. 图床

一个图片服务器,可以上传本地图片,通过链接可以查看图片,对于写博客很有帮助

https://imgtu.com/

2021 05 18 16 56 23屏幕截图

3. Linux系统的翻墙方案

之前在windows和iphone上翻墙用的shadowsocket,一个月七八块钱,网址是 vdoos.com。在linux上用它的客户端不给力

进行一番摸索后,用v2ray实现翻墙,并且免费

教程链接:https://www.youtube.com/watch?v=JGW76bYFbGU

youtube上搜索linux翻墙,v2ray等关键字也可以搜到很多教程!

4. 文字转声音

之前写人机交互实验 做 倒计时网页用到的一个网站,https://peiyin.wozhiyi.com/ ,可以通过输入文字生成音频

5. Redis bug

  1. Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

之前项目中碰到的一个问题,Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。请查看Redis日志的详细错误信息。

解决办法: 执行 config set stop-writes-on-bgsave-error no

6. nacos bug

linux nacos启动:

bash -f ./startup.sh -m standalone

之前用sh startup.sh -m standalone一直启动失败,直到换成这个命令….

7. nginx bug

8. Java bug

  1. io.jsonwebtoken.ExpiredJwtException

之前使用jwt碰到的一个bug,跟jwt过期时间相关

在解析token并发现这个token已经过期了,它作出的反应是直接抛异常,除了msg信息,还有claims和header信息;

1
2
3
4
5
6
7
8
public Claims parseJwt(String token){
Claims claims = Jwts.parser()
.setSigningKey(signKey) // 设置标识名
.parseClaimsJws(token) //解析token
.getBody();
return claims;
}

改为

1
2
3
4
5
6
7
public Boolean isTokenExpired(String token) {
//不管是否过期,都返回claims对象
Claims claims = this.parseJwt(token);
Date expiration = claims.getExpiration();
//和当前时间进行对比来判断是否过期
return new Date(System.currentTimeMillis()).after(expiration);
}

9. 查找文档

很方便的一个文档,教程查找网站 https://www.jiumodiary.com/

单例模式的几种实现

利用两个公式,对给定的数据集(线性相关) 进行预测….没有在sklearn找到合适的线性相关数据集合,自己构造了一个数据集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# /*
# * @Author: bibofu
# * @Date: 2021-05-07 19:25:48
# */

import numpy as np
import matplotlib.pyplot as plt

from collections import OrderedDict
import pandas as pd
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.metrics import mean_squared_error

from sklearn import datasets



# 定义一个类....
class LinearRegression:
# 初始化,类似构造函数?..
def __init__(self):
self.w = None
self.n_features = None

# 公式1
def fit1(self, X, y):

# 将X数据降维
X = X.squeeze()

# 求平均值
x_mean = np.mean(X)
y_mean = np.mean(y)
xy_mean = np.mean(X*y)
xx_mean = np.mean(X*X)

# 得到w,b =>y=wx+b
w = ((x_mean*y_mean)-xy_mean)/(x_mean**2-xx_mean)
b = y_mean - w*x_mean

self.w = [w, b]


# 公式2
def fit2(self, X, y):


n_samples = X.shape[0]
# 给定的数据shape是(n,),写shape(1)会报错
self.n_features = 1

extra = np.ones((n_samples,))
X = np.c_[X, extra]
if self.n_features < n_samples:
self.w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
else:
raise ValueError('wrong samples')


# 预测
def predict(self, X):

#将X 降维
n_samples = X.shape[0]
extra = np.ones((n_samples,))
X = np.c_[X, extra]



if self.w is None:
raise RuntimeError('cant predict before fit')
y_ = X.dot(self.w)
return y_


if __name__ == '__main__':


# 数据集
examDict = {'学习时间': [0.5, 0.75, 1, 1.25, 1.5, 1.75, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 4, 4.25, 4.5, 4.75, 5, 5.5, 6],
'学习成绩': [10, 22, 13, 43, 20, 22, 23, 33, 50, 62, 48, 55, 75, 62, 73, 81, 76, 64, 82, 90, 93]}

examOrderDic = OrderedDict(examDict)
examDf = pd.DataFrame(examOrderDic)

# print(examDf.head())

# 1、提取特征和标签
X = examDf.loc[:, '学习时间']
y = examDf.loc[:, '学习成绩']


#print(X.shape) (21,)
#print(y.shape) (21,)


lr = LinearRegression()
#lr.fit1(X, y) # 训练模型
lr.fit2(X, y)
X_new = np.array([[0], [6]]) # 画出模型在 0 到 6 区间内的值
y_predict = lr.predict(X_new) # 根据学习时间预测学习成绩
plt.scatter(X, y)
plt.title('More Time More Scores')
plt.xlabel('time')
plt.ylabel('grade')
plt.plot(X_new, y_predict, "blue") # 画出模型
plt.show()

2021年4月,不那么完美的一个月。完成了100道左右leetcode,复习了Mysql,Redis,操作系统,计算机网络等知识,参加了N场笔试但都做得很差,面试了两家大厂但没有拿到offer。

5月,继续努力,希望运气好点

热门面试题 1

1. 两数之和

leetcode地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<nums.length;i++){
map.put(nums[i],i);
}

int[] res=new int[2];

for(int i=0;i<nums.length;i++){
int need=target-nums[i];
if(map.containsKey(need)&&map.get(need)!=i){
res[0]=i;
res[1]=map.get(need);
break;


}
}

return res;

}
}

2. 两数相加

leetcode地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if(l1==null||l2==null){
return null;
}

ListNode pre=new ListNode(0);
ListNode cur=pre;

int carry=0;
while(l1!=null&&l2!=null){
int temp=l1.val+l2.val+carry;
carry=temp/10;
cur.next=new ListNode(temp%10);

cur=cur.next;
l1=l1.next;
l2=l2.next;

}

while(l1!=null){
int temp=l1.val+carry;
carry=temp/10;
cur.next=new ListNode(temp%10);

cur=cur.next;

l1=l1.next;
}

while(l2!=null){
int temp=l2.val+carry;
carry=temp/10;
cur.next=new ListNode(temp%10);

cur=cur.next;

l2=l2.next;
}

if(carry!=0){
cur.next=new ListNode(carry);
}



return pre.next;


}
}

3. 无重复字符最长子串

leetcode地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public int lengthOfLongestSubstring(String s) {

if(s==null||s.length()==0){
return 0;
}

int left=0;
int right=-1;
int max_len=0;

int[] freq=new int[256];
while(left<s.length()){
if(right+1<s.length()&&freq[s.charAt(right+1)]==0){
right++;
freq[s.charAt(right)]++;
}else{
freq[s.charAt(left)]--;
left++;
}

if(right-left+1>max_len){
max_len=right-left+1;
}
}

return max_len;

}
}

206. 反转链表

leetcode地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {

if(head==null||head.next==null){
return head;
}

ListNode pre=null;
ListNode cur=head;
while(cur!=null){
ListNode next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}

return pre;



}
}

146. LRU缓存机制

leetcode地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
class LRUCache {

class Node{
int key;
int value;
Node prev;
Node next;
public Node(int k,int v){
key=k;
value=v;
}
}

Node head;
Node tail;
Map<Integer,Node> map;
int size;
int capacity;

public LRUCache(int capacity) {
head=new Node(0,0);
tail=new Node(0,0);
head.next=tail;
tail.prev=head;

map=new HashMap<>();
size=0;
this.capacity=capacity;

}


public int get(int key) {

if(!map.containsKey(key)){
return -1;
}else{
Node node=map.get(key);
remove(key);
addHead(key,node.value);

return node.value;

}


}

public void put(int key, int value) {
if(map.containsKey(key)){
remove(key);
addHead(key,value);
}else{
addHead(key,value);
}

}

private void remove(int key){
Node cur=map.get(key);
Node next=cur.next;
Node prev=cur.prev;
prev.next=next;
next.prev=prev;
size--;
map.remove(key);
}

private void addHead(int key,int value){
Node node=new Node(key,value);
Node next=head.next;
head.next=node;
node.next=next;
next.prev=node;
node.prev=head;
size++;
map.put(key,node);
if(size>capacity){
Node preTail=tail.prev;
remove(preTail.key);
}

}
}

/**
* Your LRUCache object will be instantiated and called as such:
* LRUCache obj = new LRUCache(capacity);
* int param_1 = obj.get(key);
* obj.put(key,value);
*/

102. 二叉树层序遍历

leetcode地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {

List<List<Integer>> res=new ArrayList<>();
if(root==null){
return res;
}

Queue<TreeNode> queue=new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
List<Integer> temp=new ArrayList<>();
int size=queue.size();
for(int i=0;i<size;i++){
TreeNode pop=queue.poll();
temp.add(pop.val);

if(pop.left!=null){
queue.offer(pop.left);
}

if(pop.right!=null){
queue.offer(pop.right);
}

}
res.add(new ArrayList<>(temp));

}

return res;

}
}

215. 数组中第K个最大元素

leetcode地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public int findKthLargest(int[] nums, int k) {

if(nums.length==0){
return 0;
}

Queue<Integer> queue=new PriorityQueue<>();

for(int i=0;i<nums.length;i++){
if(i<k){
queue.offer(nums[i]);

}else{
if(nums[i]>queue.peek()){
queue.poll();
queue.offer(nums[i]);
}
}


}

return queue.peek();

}
}

25. K个一组翻转链表

leetcode地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {

if(head==null){
return null;
}

ListNode a=head;
ListNode b=head;
for(int i=0;i<k;i++){
if(b==null){
return head;
}
b=b.next;
}

ListNode newhead=reverse(a,b);
a.next=reverseKGroup(b,k);
return newhead;

}

public ListNode reverse(ListNode a,ListNode b){
ListNode pre=null;
ListNode cur=a;
ListNode next=null;

while(cur!=b){
next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}

return pre;
}
}

15:三数之和

leetcode地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Solution {
public List<List<Integer>> threeSum(int[] nums) {


List<List<Integer>> res=new ArrayList<>();

if(nums==null||nums.length<3){
return res;
}

Arrays.sort(nums);

for(int i=0;i<nums.length;i++){

if(i>0&&nums[i-1]==nums[i]){
continue;
}
int left=i+1;
int right=nums.length-1;
while(left<right){
if(nums[i]+nums[left]+nums[right]==0){
List<Integer> temp=new ArrayList<>();
temp.add(nums[i]);
temp.add(nums[left]);
temp.add(nums[right]);

res.add(temp);

while(left<right&&nums[left]==nums[left+1]){
left++;
}

while(left<right&&nums[right]==nums[right-1]){
right--;
}
left++;
right--;
}else if(nums[i]+nums[left]+nums[right]<0){
left++;

}else{
right--;
}

}

}

return res;

}
}

121:买卖股票最佳时机

leetcode地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int maxProfit(int[] prices) {
int minPrice=prices[0];
int maxProfit=0;
for(int i:prices){
if(i<minPrice){
minPrice=i;
}
if(i-minPrice>maxProfit){
maxProfit=i-minPrice;
}
}

return maxProfit;

}
}