Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_36480062
Algorithm
提交
5d3b252a
A
Algorithm
项目概览
qq_36480062
/
Algorithm
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
Algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
5d3b252a
编写于
3月 09, 2020
作者:
qq_36480062
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
commit
上级
3d232c56
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
88 addition
and
2 deletion
+88
-2
algorithm/尺取法/ruler.java
algorithm/尺取法/ruler.java
+87
-0
挑战程序设计竞赛/src/BFS/迷宫最短路径BFS实现.java
挑战程序设计竞赛/src/BFS/迷宫最短路径BFS实现.java
+1
-2
未找到文件。
algorithm/尺取法/ruler.java
0 → 100644
浏览文件 @
5d3b252a
package
尺取法;
/**
*
https
:
//www.cnblogs.com/-Ackerman/p/11162833.html
*
关于大佬的尺取法
*
先看例题:
*
给你一个序列
(
大小为n
)
,
让你去找到一个区间
[
i
,
j
],
*
区间内所有数的和
sum
>=
15
*
求出满足这样要求的最小的区间长度
*
The
truth
that
you
leave
*
双指针
*/
@SuppressWarnings
(
"all"
)
public
class
ruler
{
public
static
void
main
(
String
[]
args
)
{
int
[]
arr
=
{
5
,
1
,
3
,
5
,
10
,
7
,
4
,
9
,
2
,
13
};
System
.
out
.
println
(
chiqu
(
arr
,
15
));
int
[]
a
=
{
1
,
1
,
1
,
0
,
0
,
0
,
1
,
1
,
1
,
1
,
0
};
System
.
out
.
println
(
two
(
a
,
2
));
}
/**
* 给你一个序列(大小为n),让你去找到一个区间[i,j],
* 区间内所有数的和 sum >= 15
* 求出满足这样要求的最小的区间长度
*
* @param arr
* @return
*/
static
int
chiqu
(
int
[]
arr
,
int
n
)
{
int
i
=
0
,
j
=
0
,
ans
=
Integer
.
MIN_VALUE
;
int
sum
=
arr
[
0
];
while
(
i
<=
j
&&
j
<
arr
.
length
)
{
if
(
sum
>=
n
)
{
//枚举所有区间!!!,会打印所有区间
System
.
out
.
printf
(
"%d,%d"
,
i
+
1
,
j
+
1
);
System
.
out
.
println
();
ans
=
Math
.
max
(
j
-
i
+
1
,
ans
);
sum
-=
arr
[
i
];
i
++;
}
else
{
j
++;
if
(
j
==
arr
.
length
)
break
;
sum
+=
arr
[
j
];
}
}
return
ans
;
}
/**
* 给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。
* 返回仅包含 1 的最长(连续)子数组的长度。
* 示例 1:
* 输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
* 输出:6
* 解释:
* [1,1,1,0,0,1,1,1,1,1,1]
* 粗体数字从 0 翻转到 1,最长的子数组长度为 6。
* 示例 2:
* 输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
* 输出:10
* 解释:
* [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
* 粗体数字从 0 翻转到 1,最长的子数组长度为 10。
* 显然:看代码
*
* @return
*/
static
int
two
(
int
[]
arr
,
int
k
)
{
int
left
=
0
;
int
ans
=
0
;
//显然使得left和right达到最长,怎么使用k
for
(
int
right
=
0
;
right
<
arr
.
length
;
right
++)
{
if
(
arr
[
right
]
==
0
)
{
k
--;
//遇见一次0就使用一次k,维护k值
}
if
(
k
<
0
)
{
//如果k不够用了,舍弃左边界那个元素left++
if
(
arr
[
left
]
==
0
)
{
//如果左边为0,直接舍弃那个元素,left++
k
++;
}
left
++;
//左边界++
}
ans
=
Math
.
max
(
ans
,
right
-
left
+
1
);
}
return
ans
;
}
}
挑战程序设计竞赛/src/BFS/迷宫最短路径BFS实现.java
浏览文件 @
5d3b252a
...
...
@@ -14,8 +14,7 @@ import java.util.Scanner;
* 请计算从出发点到终点最少需要多少步,
* 若不能到达终点则输出0
* N,M<=100
* * n=10 m=10
* <p>
* n=10 m=10
* #S######.#
* ......#..#
* .#.##.##.#
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录