Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
NoComments
leetcode
提交
028e1405
L
leetcode
项目概览
NoComments
/
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 搜索 >>
提交
028e1405
编写于
3月 01, 2019
作者:
L
liu13
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
20190301
上级
a7596590
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
114 addition
and
1 deletion
+114
-1
code/lc237.java
code/lc237.java
+28
-0
code/lc295.java
code/lc295.java
+9
-1
code/lc324.java
code/lc324.java
+77
-0
未找到文件。
code/lc237.java
0 → 100644
浏览文件 @
028e1405
package
code
;
/*
* 237. Delete Node in a Linked List
* 题意:删除链表中的一个节点,给的是这个节点,不知道前边的节点
* 难度:Easy
* 分类:Linked List
* 思路:剑指Offer上有,拷贝下一个节点的内容到该节点,倒数第二个节点置空
* Tips:
*/
public
class
lc237
{
public
class
ListNode
{
int
val
;
ListNode
next
;
ListNode
(
int
x
)
{
val
=
x
;
}
}
public
void
deleteNode
(
ListNode
node
)
{
ListNode
pre
=
new
ListNode
(-
1
);
while
(
node
.
next
!=
null
)
{
node
.
val
=
node
.
next
.
val
;
pre
=
node
;
node
=
node
.
next
;
}
pre
.
next
=
null
;
}
}
code/lc295.java
浏览文件 @
028e1405
package
code
;
import
java.util.PriorityQueue
;
/*
* 295. Find Median from Data Stream
* 题意:流数据中找中位数
* 难度:Hard
* 分类:
* 思路:用两个优先队列,一个保存左半边最大值,一个保存右半边最小值
* 保持左半边最多比右半边多一个数
* Tips:
*/
public
class
lc295
{
class
MedianFinder
{
PriorityQueue
<
Integer
>
pq1
;
//默认是最小,右半边
...
...
code/lc324.java
0 → 100644
浏览文件 @
028e1405
package
code
;
import
java.util.Arrays
;
/*
* 324. Wiggle Sort II
* 题意:小大小大小大 这样排序
* 难度:Medium
* 分类:Sort
* 思路:先找到中位数,然后一个小于中位数的,一个大于中位数的这样组合
* 用 index map 的方式可以使空间也为O(1)
* Tips:挺难的。
*/
public
class
lc324
{
public
void
wiggleSort
(
int
[]
nums
)
{
if
(
nums
.
length
==
1
)
return
;
int
n
=
nums
.
length
,
m
=
(
n
+
1
)
>>
1
;
// (nums.length+1)/2 注意+1
int
[]
copy
=
Arrays
.
copyOf
(
nums
,
n
);
int
median
=
findMedium
(
nums
,
0
,
nums
.
length
-
1
,
m
);
for
(
int
i
=
0
,
j
=
0
,
k
=
n
-
1
;
j
<=
k
;)
{
// <medium的放左边, >在右边
if
(
copy
[
j
]
<
median
)
{
swap
(
copy
,
i
++,
j
++);
}
else
if
(
copy
[
j
]
>
median
)
{
swap
(
copy
,
j
,
k
--);
}
else
{
j
++;
}
}
for
(
int
i
=
m
-
1
,
j
=
0
;
i
>=
0
;
i
--,
j
+=
2
)
nums
[
j
]
=
copy
[
i
];
//注意这点细节,i--倒着来,防止中位数重复的情况bug
for
(
int
i
=
n
-
1
,
j
=
1
;
i
>=
m
;
i
--,
j
+=
2
)
nums
[
j
]
=
copy
[
i
];
}
private
int
getMiddle
(
int
[]
nums
,
int
l
,
int
r
)
{
int
i
=
l
;
for
(
int
j
=
l
+
1
;
j
<=
r
;
j
++)
{
if
(
nums
[
j
]
<
nums
[
l
])
swap
(
nums
,
++
i
,
j
);
}
swap
(
nums
,
l
,
i
);
return
i
;
}
private
void
swap
(
int
[]
nums
,
int
i
,
int
j
)
{
int
t
=
nums
[
i
];
nums
[
i
]
=
nums
[
j
];
nums
[
j
]
=
t
;
}
public
static
int
findMedium
(
int
[]
nums
,
int
left
,
int
right
,
int
k
){
int
cur
=
nums
[
left
];
int
l
=
left
;
int
r
=
right
;
while
(
left
<
right
){
while
(
left
<
right
&&
nums
[
right
]>=
nums
[
left
]
)
right
--;
int
temp
=
nums
[
left
];
nums
[
left
]
=
nums
[
right
];
nums
[
right
]
=
temp
;
while
(
left
<
right
&&
nums
[
left
]<
nums
[
right
])
left
++;
temp
=
nums
[
left
];
nums
[
left
]
=
nums
[
right
];
nums
[
right
]
=
temp
;
}
if
(
left
==
k
-
1
)
return
nums
[
left
];
else
if
(
left
>=
k
)
return
findMedium
(
nums
,
l
,
right
-
1
,
k
);
else
return
findMedium
(
nums
,
right
+
1
,
r
,
k
);
}
public
static
int
newIndex
(
int
index
,
int
n
)
{
return
(
1
+
2
*
index
)
%
(
n
|
1
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录