Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
一梦清浅…
leetcode
提交
6c4a4796
L
leetcode
项目概览
一梦清浅…
/
leetcode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
leetcode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
6c4a4796
编写于
1月 18, 2019
作者:
L
liu13
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
20190118
上级
2850c153
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
133 addition
and
0 deletion
+133
-0
code/lc394.java
code/lc394.java
+54
-0
code/lc406.java
code/lc406.java
+37
-0
code/lc416.java
code/lc416.java
+42
-0
未找到文件。
code/lc394.java
0 → 100644
浏览文件 @
6c4a4796
package
code
;
/*
* 394. Decode String
* 题意:解码字符串
* 难度:Medium
* 分类:Stack, Depth-first Search
* 思路:用栈
* Tips:可以用两个栈,一个字符串入栈,而不是字符入栈,另一个数字入栈。提高运行速度,不用重复遍历字符。
*/
import
java.util.Stack
;
public
class
lc394
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
decodeString
(
"2[abc]3[cd]ef"
));
}
public
static
String
decodeString
(
String
s
)
{
Stack
<
Character
>
st
=
new
Stack
();
int
i
=
0
;
char
[]
str_arr
=
s
.
toCharArray
();
StringBuilder
res
=
new
StringBuilder
();
while
(
i
<
s
.
length
()){
if
(
str_arr
[
i
]==
']'
){
StringBuilder
temp
=
new
StringBuilder
();
StringBuilder
num
=
new
StringBuilder
();
while
(
st
.
peek
()!=
'['
){
temp
.
insert
(
0
,
st
.
pop
());
}
st
.
pop
();
// pop出 [
while
(!
st
.
isEmpty
()
&&
Character
.
isDigit
(
st
.
peek
())){
num
.
insert
(
0
,
st
.
pop
());
}
StringBuilder
temp2
=
new
StringBuilder
();
for
(
int
j
=
0
;
j
<
Integer
.
valueOf
(
num
.
toString
())
;
j
++)
{
temp2
.
append
(
temp
.
toString
());
}
//入栈
for
(
int
j
=
0
;
j
<
temp2
.
toString
().
length
()
;
j
++)
{
st
.
push
(
temp2
.
toString
().
toCharArray
()[
j
]);
}
}
else
{
st
.
push
(
str_arr
[
i
]);
}
i
++;
}
// 别忘了末尾的
StringBuilder
sb1
=
new
StringBuilder
();
while
(!
st
.
isEmpty
()){
sb1
.
insert
(
0
,
st
.
pop
());
}
res
.
append
(
sb1
);
return
res
.
toString
();
}
}
code/lc406.java
0 → 100644
浏览文件 @
6c4a4796
package
code
;
/*
* 406. Queue Reconstruction by Height
* 题意:队列重构,每个元素有两个值,一个是身高,一个是他前边有几个比他高的,相同身高也算比他高
* 难度:Medium
* 分类:Greedy
* 思路:每次把当前最高身高的挑出来,按第二个值排序插进来
* E.g.
* input: [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
* subarray after step 1: [[7,0], [7,1]]
* subarray after step 2: [[7,0], [6,1], [7,1]]
* Tips:看下别人的代码,写的很简洁。注意相关的接口和方法。
*/
import
java.util.Arrays
;
import
java.util.Comparator
;
import
java.util.LinkedList
;
import
java.util.List
;
public
class
lc406
{
public
static
void
main
(
String
[]
args
)
{
int
[][]
people
=
{{
7
,
0
},
{
4
,
4
},
{
7
,
1
},
{
5
,
0
},
{
6
,
1
},
{
5
,
2
}};
reconstructQueue
(
people
);
}
public
static
int
[][]
reconstructQueue
(
int
[][]
people
)
{
Arrays
.
sort
(
people
,
new
Comparator
<
int
[]>(){
@Override
public
int
compare
(
int
[]
o1
,
int
[]
o2
){
return
o1
[
0
]!=
o2
[
0
]?-
o1
[
0
]+
o2
[
0
]:
o1
[
1
]-
o2
[
1
];
//按身高降序排序,如果身高相同,则按前边有几个人增序排序
}
});
List
<
int
[]>
res
=
new
LinkedList
<>();
for
(
int
[]
cur
:
people
){
res
.
add
(
cur
[
1
],
cur
);
//用于在列表的指定位置插入指定元素,并将当前处于该位置的元素及其后续元素的索引加1
}
return
res
.
toArray
(
new
int
[
people
.
length
][]);
//list转array,需要传入一个array对象
}
}
code/lc416.java
0 → 100644
浏览文件 @
6c4a4796
package
code
;
import
java.util.HashSet
;
/*
* 416. Partition Equal Subset Sum
* 题意:一个数组,可否分成和相等的两部分
* 难度:Medium
* 分类:Dynamic Programming
* 思路:题意可以转换为用任意个元素组成的和等于数组和/2。可以和 lc1, lc15 3-Sum 对比。
* 0,1背包问题,递推比较简单,所以空间可以压缩成一维
* 自己想的思路其实和压缩后的0,1背包类似,但没想到该问题可以抽象为0,1背包
* Tips:
*/
public
class
lc416
{
public
static
void
main
(
String
[]
args
)
{
int
[]
nums
=
{
1
,
2
,
5
};
System
.
out
.
println
(
canPartition
(
nums
));
}
public
static
boolean
canPartition
(
int
[]
nums
)
{
int
sum
=
0
;
for
(
int
i
:
nums
)
{
sum
+=
i
;
}
if
(
sum
%
2
==
1
)
return
false
;
sum
/=
2
;
HashSet
<
Integer
>
s
=
new
HashSet
();
for
(
int
i
=
0
;
i
<
nums
.
length
;
i
++)
{
if
(
nums
[
i
]==
sum
)
return
true
;
HashSet
<
Integer
>
s2
=
new
HashSet
();
// 新建一个set,用以存放这一轮的结果
s2
.
add
(
nums
[
i
]);
for
(
int
j:
s
){
if
(
j
+
nums
[
i
]==
sum
)
return
true
;
s2
.
add
(
j
+
nums
[
i
]);
}
s
.
addAll
(
s2
);
}
return
false
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录