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的更多相关文章

  1. 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [ ...

  2. 新手C#构造函数、继承、组合的学习2018.08.06/07

    构造函数,是一种特殊的方法.主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同 ...

  3. 新手C#属性set,get的学习(部分转)2018.08.06

    public class person { public string name; } public class person { public string Name { set; get; } } ...

  4. 新手C#面向对象的学习2018.08.06

    class Person//声明一个Person类 { //类中的声明与Main中不同,类中声明的是字段而不是函数. public string gender; public string name= ...

  5. ZROI 19.08.06模拟赛

    传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. 今天正睿又倒闭了,从删库到跑路. 天祺鸽鸽txdy! A "不要像个小学生一样一分钟就上来问东西."--蔡老板 虽 ...

  6. 2021.08.06 P4392 Sound静音问题(ST表)

    2021.08.06 P4392 Sound静音问题(ST表) [P4392 BOI2007]Sound 静音问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 序列a,求 ...

  7. 2021.08.06 P2441 角色属性树(树形结构)

    2021.08.06 P2441 角色属性树(树形结构) P2441 角色属性树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 求离x最近的祖先y且(x,y)>1. ...

  8. 2021.08.06 P3478 STA-Station(树形结构)

    2021.08.06 P3478 STA-Station(树形结构) [P3478 POI2008]STA-Station - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给 ...

  9. LeetCode1046 最后一块石头的重量(贪心—Java优先队列简单应用)

    题目: 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == ...

  10. leetcode 1049 Last Stone Weight II(最后一块石头的重量 II)

    有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y,那么 ...

随机推荐

  1. React Hooks方法

    1.useState import React, { useState } from "react"; /* 目标: 掌握useState的使用 作用:实现响应式数据的 用法:引入 ...

  2. 2020-01-26:mysql8.0做了什么改进?

    福哥答案2020-01-26: [2020-01-26:mysql8.0做了什么改进?](http://bbs.xiangxueketang.cn/question/1244)帐户管理增加了对角色的支 ...

  3. 2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串。 如果是,返回true; 否则,返回false。 来自字节飞书团队。

    2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串. 如果是,返回true: 否则,返回false. 来自字节飞书团队. 答案 ...

  4. 2021-02-13:字符串str最少添加多少个字符变成回文串?

    福哥答案2020-02-13: 假设字符串str是"abcde12344321",在str后添加"edcba"即可变成回文串.需要添加5个字符. 解法:包含最后 ...

  5. mysql 5.7 json 类型 json 数组类型 普通字符串类型 10w数据 查询速度差异

    json 非数组 建表语句ddl CREATE TABLE tb_json_test ( id INT NOT NULL AUTO_INCREMENT, user_no VARCHAR(100), u ...

  6. java中接口,抽象类,具体类之间的关系

    抽象类实现接口,具体类继承于抽象类

  7. Python之Excel表格数据处理

    正式开讲之前,我们需要先了解几个基本的知识点:1.Python字典(Dictionary) 的setdefault()方法描述:如果键不存在于字典中,将会添加键并将值设为默认值.语法:dict.set ...

  8. Vue——vuex使用、Router使用、localstorage、sessionstorage和cookie

    vuex使用 # vuex :状态管理器--->存数据(变量)的地方,所有组件都可以操作 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理( ...

  9. 前端vue 宫格组件提供常见九宫格菜单组件,扩充性好,可切换九宫格 十二宫格 十五宫格

    快速实现vue uni-app宫格组件提供常见九宫格菜单组件,扩充性好,可切换九宫格 十二宫格 十五宫格; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net. ...

  10. 如何优化数据warehouse的搜索和查询

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.2.1 查询优化 2.2.2 索引优化 2.2.3 数据访问优化 2.3 相关技术比较 2.3.1 SQL 2. ...