Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
一梦清浅…
leetcode
提交
3b593912
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 搜索 >>
提交
3b593912
编写于
2月 22, 2019
作者:
L
liu13
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
20190222
上级
7d90c4bb
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
166 addition
and
0 deletion
+166
-0
.gitignore
.gitignore
+1
-0
code/lc162.java
code/lc162.java
+48
-0
code/lc166.java
code/lc166.java
+39
-0
code/lc179.java
code/lc179.java
+35
-0
code/lc212.java
code/lc212.java
+43
-0
未找到文件。
.gitignore
浏览文件 @
3b593912
.DS_Store
*/.DS_Store
/kickstart/*
test.java
code/lc162.java
0 → 100644
浏览文件 @
3b593912
package
code
;
/*
* 162. Find Peak Element
* 题意:找出数组中任意一个山顶点,时间复杂度O(lg(n)),山顶点指该数左右两边都的数都小于他
* 难度:Medium
* 分类:Array, Binary Search
* 思路:二分查找,想好左右两边递归判断。只有nums[mid]<nums[mid+1],说名右半边就存在峰值
* Tips:
*/
public
class
lc162
{
public
int
findPeakElement
(
int
[]
nums
)
{
int
[]
nums2
=
new
int
[
nums
.
length
+
2
];
//左右加了个最小值
for
(
int
i
=
0
;
i
<
nums
.
length
;
i
++)
{
nums2
[
i
+
1
]
=
nums
[
i
];
}
nums2
[
0
]
=
Integer
.
MIN_VALUE
;
nums2
[
nums2
.
length
-
1
]
=
Integer
.
MIN_VALUE
;
return
helper
(
nums2
,
1
,
nums2
.
length
-
2
)-
1
;
}
public
int
helper
(
int
[]
nums
,
int
left
,
int
right
){
System
.
out
.
println
(
nums
.
length
);
while
(
left
<=
right
){
int
mid
=
(
left
+
right
)/
2
;
if
(
nums
[
mid
]>
nums
[
mid
+
1
]&&
nums
[
mid
]>
nums
[
mid
-
1
])
return
mid
;
if
(
nums
[
mid
]<
nums
[
mid
+
1
]){
left
=
mid
+
1
;
}
else
{
right
=
mid
-
1
;
}
}
return
left
;
}
public
int
findPeakElement2
(
int
[]
nums
)
{
//第二种方法不用左右加个边界
return
helper2
(
nums
,
0
,
nums
.
length
-
1
);
}
public
int
helper2
(
int
[]
nums
,
int
left
,
int
right
){
while
(
left
<
right
){
//这没有==
int
mid
=
(
left
+
right
)/
2
;
if
(
nums
[
mid
]<
nums
[
mid
+
1
]){
left
=
mid
+
1
;
}
else
{
right
=
mid
;
//这没有-1
}
}
return
left
;
}
}
code/lc166.java
0 → 100644
浏览文件 @
3b593912
package
code
;
import
java.util.HashMap
;
/*
* 166. Fraction to Recurring Decimal
* 题意:实现除法,循环小数部分用()括起来
* 难度:Medium
* 分类:Hash Table, Math
* 思路:首先计算整数部分,然后加上小数点,再计算小数部分
* 用 Hash Table 记录之前的余数,余数相同表示小数点开始循环。
* 注意符号和溢出的情况
* Tips:看似简单的题,并不好写
*/
public
class
lc166
{
public
String
fractionToDecimal
(
int
numerator
,
int
denominator
)
{
StringBuilder
sb
=
new
StringBuilder
();
if
(
(
numerator
>
0
&&
denominator
<
0
)
||
(
numerator
<
0
&&
denominator
>
0
))
sb
.
append
(
"-"
);
//符号
long
num
=
Math
.
abs
((
long
)
numerator
);
//用long防止溢出
long
den
=
Math
.
abs
((
long
)
denominator
);
sb
.
append
(
num
/
den
);
//整数部分
HashMap
<
Long
,
Integer
>
hm
=
new
HashMap
();
//key存储余数,余数>0 <9, value存储index,用来加(
long
n
=
num
%
den
;
if
(
n
!=
0
)
sb
.
append
(
"."
);
while
(
n
!=
0
&&
!
hm
.
containsKey
(
n
)){
hm
.
put
(
n
,
sb
.
length
());
n
=
n
*
10
;
sb
.
append
(
n
/
den
);
n
=
n
%
den
;
}
if
(
hm
.
containsKey
(
n
)){
int
index
=
hm
.
get
(
n
);
sb
.
insert
(
index
,
"("
);
sb
.
append
(
")"
);
}
return
sb
.
toString
();
}
}
code/lc179.java
0 → 100644
浏览文件 @
3b593912
package
code
;
/*
* 179. Largest Number
* 题意:给一个由数字组成的数组,返回排列组合成的最大数
* 难度:Medium
* 分类:Sort
* 思路:两个数字,i+j 与 j+i 比较,排序。
* 学会实现Comparator接口
* Tips:要先转换成string再实现Comparator接口,直接比较字符串,比较数字会报错。。。
*/
import
java.util.Arrays
;
import
java.util.Comparator
;
public
class
lc179
{
public
String
largestNumber
(
int
[]
nums
)
{
String
[]
strs
=
new
String
[
nums
.
length
];
//先转换成string再比较
for
(
int
i
=
0
;
i
<
strs
.
length
;
i
++)
{
strs
[
i
]
=
String
.
valueOf
(
nums
[
i
]);
}
Arrays
.
sort
(
strs
,
new
Comparator
<
String
>()
{
// Comparator接口
@Override
public
int
compare
(
String
i
,
String
j
)
{
String
s1
=
i
+
j
;
// i+j 与 j+i 比较
String
s2
=
j
+
i
;
return
s2
.
compareTo
(
s1
);
}
});
if
(
strs
[
0
].
equals
(
"0"
))
return
"0"
;
//防止"000"的情况
String
res
=
""
;
for
(
String
str:
strs
)
{
res
+=
str
;
}
return
res
;
}
}
code/lc212.java
0 → 100644
浏览文件 @
3b593912
package
code
;
/*
* 212. Word Search II
* 题意:找出字符数组中路径可以拼出的字符串
* 难度:Hard
* 分类:Backtracking, Trie
* 思路:暴力搜索回溯法就可以AC
* 更好的方法是借助字典树数据结构进行剪枝,减少重复的搜索路径
* https://leetcode.com/problems/word-search-ii/discuss/59780/Java-15ms-Easiest-Solution-(100.00)
* Tips:
*/
import
java.util.ArrayList
;
import
java.util.List
;
public
class
lc212
{
public
List
<
String
>
findWords
(
char
[][]
board
,
String
[]
words
)
{
//暴力搜索
List
<
String
>
res
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
board
.
length
;
i
++)
{
for
(
int
j
=
0
;
j
<
board
[
0
].
length
;
j
++)
{
for
(
int
k
=
0
;
k
<
words
.
length
;
k
++)
{
char
[]
str
=
words
[
k
].
toCharArray
();
if
(
dfs
(
board
,
i
,
j
,
str
,
0
)&&!
res
.
contains
(
words
[
k
]))
res
.
add
(
words
[
k
]);
//记得去重
}
}
}
return
res
;
}
public
boolean
dfs
(
char
[][]
board
,
int
i
,
int
j
,
char
[]
str
,
int
index
){
if
(
i
<
0
||
j
<
0
||
i
>=
board
.
length
||
j
>=
board
[
0
].
length
||
index
>=
str
.
length
)
return
false
;
if
(
board
[
i
][
j
]==
str
[
index
]){
if
(
index
==
str
.
length
-
1
)
return
true
;
board
[
i
][
j
]
=
'0'
;
boolean
res
=
dfs
(
board
,
i
+
1
,
j
,
str
,
index
+
1
)||
dfs
(
board
,
i
-
1
,
j
,
str
,
index
+
1
)||
dfs
(
board
,
i
,
j
+
1
,
str
,
index
+
1
)||
dfs
(
board
,
i
,
j
-
1
,
str
,
index
+
1
);
//用res记录结果,重置字符以后再返回
board
[
i
][
j
]
=
str
[
index
];
//记得回溯后重置为原来的字符
return
res
;
}
return
false
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录