2023-08-06:小青蛙住在一条河边, 它想到河对岸的学校去学习 小青蛙打算经过河里 的石头跳到对岸 河里的石头排成了一条直线, 小青蛙每次跳跃必须落在一块石头或者岸上 给定一个长度为n的数组ar
2023-08-06:小青蛙住在一条河边, 它想到河对岸的学校去学习
小青蛙打算经过河里 的石头跳到对岸
河里的石头排成了一条直线, 小青蛙每次跳跃必须落在一块石头或者岸上
给定一个长度为n的数组arr,表示每块儿石头的高度数值
每块石头有一个高度, 每次小青蛙从一块石头起跳
这块石头的高度就会下降1, 当石头的高度下降到0时
小青蛙不能再跳到这块石头上(跳跃后使石头高度下降到0是允许的)
小青蛙一共需要去学校上x天课, 所以它需要往返x次(去x次,回x次)
当小青蛙具有 一个跳跃能力y时, 它能跳不超过y的距离。
请问小青蛙的跳跃能力至少是多少才能用这些石头上完x次课?
1 <= n <= 10^5,
1 <= arr[i] <= 10^4,
1 <= x <= 10^9。
来自蓝桥杯练习题。
来自左神
答案2023-08-06:
大体步骤如下:
1.读取输入:从输入中读取每块石头的高度数值和小青蛙需要上课的天数x。
2.初始化变量和数组:定义一个长度为n的数组help用于保存每块石头的高度数值的累积和。初始化变量ans为0。
3.计算累积和:遍历数组arr中的每个元素,计算它们的累积和,并保存到数组help中。
4.计算最小跳跃能力:使用双指针法逐个计算每个起点石头l到终点石头r的跳跃能力。在每次迭代中,通过移动r指针使得help[r] - help[l-1] >= 2*x,即小青蛙能从起点石头跳跃到终点石头。同时,更新ans为当前最大的能连续跳跃的石头数量。
5.返回结果:返回ans作为小青蛙的最小跳跃能力。
总的时间复杂度为O(n),总的空间复杂度为O(n)。
go完整代码如下:
package main
import (
"fmt"
)
const MAXN = 100001
var help [MAXN]int
var n, x int
var sc = []int{5, 1, 1, 0, 1, 0}
var ii = 0
func next() int {
ii++
return sc[ii-1]
}
func hasNext() bool {
return ii < len(sc)
}
func main() {
for hasNext() {
n = next()
x = next()
for i := 1; i < n; i++ {
val := next()
help[i] = help[i-1] + val
}
fmt.Println(minAbility())
}
}
// O(N)的最优解
func minAbility() int {
ans := 0
for l, r := 1, 1; l < n; l++ {
for r < n && help[r]-help[l-1] < 2*x {
r++
}
ans = max(ans, r-l+1)
}
return ans
}
func max(a, b int) int {
if a > b {
return a
}
return b
}

rust完整代码如下:
const MAXN: usize = 100001;
static mut HELP: [i64; MAXN] = [0; MAXN];
static mut N: i64 = 0;
static mut X: i64 = 0;
static mut SC: [i64; 6] = [5, 1, 1, 0, 1, 0];
static mut II: usize = 0;
fn next() -> i64 {
unsafe {
II += 1;
SC[II - 1]
}
}
fn has_next() -> bool {
unsafe { II < SC.len() }
}
fn main() {
unsafe {
while has_next() {
N = next();
X = next();
for i in 1..N {
let val = next();
HELP[i as usize] = HELP[i as usize - 1] + val;
}
println!("{}", min_ability());
}
}
}
// O(N)的最优解
fn min_ability() -> i64 {
let mut ans: i64 = 0;
unsafe {
let mut l: i64 = 1;
let mut r: i64 = 1;
while l < N {
while r < N && HELP[r as usize] - HELP[(l - 1) as usize] < 2 * X {
r += 1;
}
ans = max(ans, r - l + 1);
l += 1;
}
}
ans
}
fn max(a: i64, b: i64) -> i64 {
if a > b {
a
} else {
b
}
}

c++完整代码如下:
#include <stdio.h>
#define MAXN 100001
int help[MAXN];
int n, x;
int sc[] = { 5, 1, 1, 0, 1, 0 };
int ii = 0;
int next() {
ii++;
return sc[ii - 1];
}
int hasNext() {
return ii < sizeof(sc) / sizeof(sc[0]);
}
int min(int a, int b) {
return (a < b) ? a : b;
}
int max(int a, int b) {
return (a > b) ? a : b;
}
int minAbility() {
int ans = 0;
for (int l = 1, r = 1; l < n; l++) {
while (r < n && help[r] - help[l - 1] < 2 * x) {
r++;
}
ans = max(ans, r - l + 1);
}
return ans;
}
int main() {
while (hasNext()) {
n = next();
x = next();
for (int i = 1; i < n; i++) {
int val = next();
help[i] = help[i - 1] + val;
}
printf("%d\n", minAbility());
}
return 0;
}

c完整代码如下:
#include <stdio.h>
#define MAXN 100001
int help[MAXN];
int n, x;
int sc[] = { 5, 1, 1, 0, 1, 0 };
int ii = 0;
int next() {
ii++;
return sc[ii - 1];
}
int hasNext() {
return ii < sizeof(sc) / sizeof(sc[0]);
}
int min(int a, int b) {
return (a < b) ? a : b;
}
int max(int a, int b) {
return (a > b) ? a : b;
}
int minAbility() {
int ans = 0;
for (int l = 1, r = 1; l < n; l++) {
while (r < n && help[r] - help[l - 1] < 2 * x) {
r++;
}
ans = max(ans, r - l + 1);
}
return ans;
}
int main() {
while (hasNext()) {
n = next();
x = next();
for (int i = 1; i < n; i++) {
int val = next();
help[i] = help[i - 1] + val;
}
printf("%d\n", minAbility());
}
return 0;
}

2023-08-06:小青蛙住在一条河边, 它想到河对岸的学校去学习 小青蛙打算经过河里 的石头跳到对岸 河里的石头排成了一条直线, 小青蛙每次跳跃必须落在一块石头或者岸上 给定一个长度为n的数组ar的更多相关文章
- 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [ ...
- 新手C#构造函数、继承、组合的学习2018.08.06/07
构造函数,是一种特殊的方法.主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同 ...
- 新手C#属性set,get的学习(部分转)2018.08.06
public class person { public string name; } public class person { public string Name { set; get; } } ...
- 新手C#面向对象的学习2018.08.06
class Person//声明一个Person类 { //类中的声明与Main中不同,类中声明的是字段而不是函数. public string gender; public string name= ...
- ZROI 19.08.06模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. 今天正睿又倒闭了,从删库到跑路. 天祺鸽鸽txdy! A "不要像个小学生一样一分钟就上来问东西."--蔡老板 虽 ...
- 2021.08.06 P4392 Sound静音问题(ST表)
2021.08.06 P4392 Sound静音问题(ST表) [P4392 BOI2007]Sound 静音问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 序列a,求 ...
- 2021.08.06 P2441 角色属性树(树形结构)
2021.08.06 P2441 角色属性树(树形结构) P2441 角色属性树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 求离x最近的祖先y且(x,y)>1. ...
- 2021.08.06 P3478 STA-Station(树形结构)
2021.08.06 P3478 STA-Station(树形结构) [P3478 POI2008]STA-Station - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给 ...
- LeetCode1046 最后一块石头的重量(贪心—Java优先队列简单应用)
题目: 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == ...
- leetcode 1049 Last Stone Weight II(最后一块石头的重量 II)
有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y,那么 ...
随机推荐
- Vue3 +element-plus+ wangEditor 富文本编辑器+前端七牛云上传
我用的vue3,element-plus ,没用ts 搭建wangEditor 参考 地址 https://www.cnblogs.com/xbxxf/p/16791084.html 七牛云安装参考地 ...
- 2023-05-11:给你一个 m x n 的二进制矩阵 grid, 每个格子要么为 0 (空)要么为 1 (被占据), 给你邮票的尺寸为 stampHeight x stampWidth。 我们想将
2023-05-11:给你一个 m x n 的二进制矩阵 grid, 每个格子要么为 0 (空)要么为 1 (被占据), 给你邮票的尺寸为 stampHeight x stampWidth. 我们想将 ...
- 2022-05-30:给定一个n*2的二维数组,表示有n个任务。 一个信息是任务能够开始做的时间,另一个信息是任务的结束期限,后者一定大于前者,且数值上都是正数, 你作为单线程的人,不能并行处理任务,
2022-05-30:给定一个n*2的二维数组,表示有n个任务. 一个信息是任务能够开始做的时间,另一个信息是任务的结束期限,后者一定大于前者,且数值上都是正数, 你作为单线程的人,不能并行处理任务, ...
- 2021-02-27:假设一个固定大小为W的窗口,依次划过arr,返回每一次滑出状况的最大值。例如,arr = [4,3,5,4,3,3,6,7], W = 3。返回:[5,5,5,4,6,7]。
2021-02-27:假设一个固定大小为W的窗口,依次划过arr,返回每一次滑出状况的最大值.例如,arr = [4,3,5,4,3,3,6,7], W = 3.返回:[5,5,5,4,6,7]. 福 ...
- 2021-11-19:[0,4,7] : 0表示这里石头没有颜色,如果变红代价是4,如果变蓝代价是7,[1,X,X] : 1表示这里石头已经是红,而且不能改颜色,所以后两个数X无意义,[2,X,X]
2021-11-19:[0,4,7] : 0表示这里石头没有颜色,如果变红代价是4,如果变蓝代价是7,[1,X,X] : 1表示这里石头已经是红,而且不能改颜色,所以后两个数X无意义,[2,X,X] ...
- 2021-10-09:杨辉三角。给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。力扣118。
2021-10-09:杨辉三角.给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行.在「杨辉三角」中,每个数是它左上方和右上方的数的和.力扣118. 福大大 答案2021-10 ...
- 使用vite的创建vue项目
首先也是打开项目文件目录 在标签处快速打上cmd即可打开cmd窗口 然后按照顶部图进行操作即可完成 安装完成的样子如下图 紧接着输入 npm run dev 将Local 的IP复制到浏览器打开,出现 ...
- DP杂谈【持续更新中】
什么是DP? 推荐看一下. 正文 滚动数组优化 在一些空间贼小,时间还好的 DP 题目里,会用到优化空间的小技♂巧--滚动数组优化. 滚动数组,顾名思义,一个会滚动的数组,主要是怎样个滚法呢?接下来我 ...
- React Native项目设置路径别名
没有设置路径别名之前代码是这样的: import { px2dp } from '../../utils/screenKits'; 路径相当冗长,看着就头疼.增加了路径别名之后,变成这样 import ...
- 如何基于G6进行双树流转绘制?
1. 背景 业务背景:CRM系统随着各业务条线对线索精细化分配的诉求逐渐增加,各个条线的流向规则会越来越复杂,各个条线甚至整个CRM的线索流转规则急需一种树形的可视化的图来表达. 技术背景:在开发之前 ...